最常用的12种设计模式小结


Posted in Javascript onAugust 09, 2011

1.策略模式(Strategy): 定义了算法家族, 分别封装起来, 让它们之间可以互相替换.
比如Collections.sort(List list, Comparator c); 可以通过实现多个Comparator接口来达到多种排序的目的.
2.装饰着模式(Decorator): 动态的给一个对象添加一些额外的职责.
比如java.io包. BufferedInputStream封装了FileInputStream, 它们都实现了InputStream接口, 但前者实现了readLine方法.
3.代理模式(Proxy): 为其他对象提供一种代理以控制对这个对象的访问.
比如在用户登录时, 真正的登录类和代理登录类都实现了Login接口, 不同的是Proxy类的方法中增加了用户是否合法的判断, 只有合法时才去调用真正登录类的login方法. 用户访问的其实是Proxy的login方法.
4.工厂模式(Factory): 定义一个用以创建对象的接口, 让子类决定实例化哪个类.
当遇到需要根据某个前提条件创建不同的类实现时, 会实用工厂模式.
5.模板模式(Template): 定义一个操作中的算法骨架, 而将一些步骤延迟到子类中.
比如HibernateTemplate, 在Template中已经定义了Connection开关的实现, 用户只需要在子类中根据不同的业务写不同的sql.
6.外观模式(Facade): 为子系统中的一组接口提供一个一致的界面.
一直在用, 比如DBUtil, 将所有数据库对象封装了, 只留了DBUtil.getDBUtil()这个接口.
7.建造者模式(Builder): 将一个复杂对象的构建与它的表示分离.
8.观察者模式(Observer): 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知所有的观察者.
比如ServletContextListener, 在applcation启动时, 会通知所有这个接口的实现类.
9.抽象工厂模式(Abstract Factory): 提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们具体的类.
10.适配器模式(Adapter): 将一个类的接口转换成客户希望的另一个接口.
11.单例模式(Singleton): 保证一个类仅有一个实例,并提供一个访问它的全局控制点.
比如在加载配置文件时, 可使用该模式.
12.命令模式(Command): 将一个请求封装成为一个对象, 使可以用不同的请求对客户进行参数化.
比如Struts的MVC结构, 其实就是个Command模式.

Javascript 相关文章推荐
用javascript编写的第一人称射击游戏
Feb 25 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
Dec 26 Javascript
Js如何判断客户端是PC还是手持设备简单分析
Nov 22 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
JavaScript中的ajax功能的概念和示例详解
Oct 17 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
Aug 18 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 Javascript
Vue+Flask实现图片传输功能
Apr 01 Vue.js
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 #Javascript
javascript 主动派发事件总结
Aug 09 #Javascript
JsDom 编程小结
Aug 09 #Javascript
IE 当eval遇上function的处理
Aug 09 #Javascript
取得窗口大小 兼容所有浏览器的js代码
Aug 09 #Javascript
Javascript实现的类似Google的Div拖动效果代码
Aug 09 #Javascript
基于Jquery的文字自动截取(提供源代码)
Aug 09 #Javascript
You might like
mysql 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
javascript实现动态侧边栏代码
2014/02/19 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
公司庆典邀请函范文
2014/01/13 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
超市中秋节活动方案
2014/02/12 职场文书
聚美优品励志广告词
2014/03/14 职场文书
好学生评语大全
2014/05/05 职场文书
师德师风自我评价范文
2014/09/11 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
护士求职自荐信
2015/03/25 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
React配置子路由的实现
2021/06/03 Javascript