最常用的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 相关文章推荐
js arguments.callee的应用代码
May 07 Javascript
基于jquery的复制网页内容到WORD的实现代码
Feb 16 Javascript
js 实现 input type="file" 文件上传示例代码
Aug 07 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
Node.JS中事件轮询(Event Loop)的解析
Feb 25 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
JavaScript寄生组合式继承原理与用法分析
Jan 11 Javascript
解决layui表格的表头不滚动的问题
Sep 04 Javascript
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
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
mongodb和php的用法详解
2019/03/25 PHP
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
使用angular写一个hello world
2015/01/23 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python与mysql数据库交互的实现
2020/01/06 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
机关门卫岗位职责
2013/12/30 职场文书
年终考核评语
2014/01/19 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书