最常用的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 XML操作 封装类
Jul 01 Javascript
在次封装easyui-Dialog插件实现代码
Nov 14 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
javascript-解决mongoose数据查询的异步操作
Dec 22 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
jQuery实现简单的Ajax调用功能示例
Feb 15 jQuery
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
微信小程序返回上一页传参并刷新过程解析
Dec 13 Javascript
JS如何把字符串转换成json
Feb 21 Javascript
vue键盘事件点击事件加native操作
Jul 27 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
mysql limit查询优化分析
2008/11/12 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php中apc缓存使用示例
2013/12/25 PHP
php的sso单点登录实现方法
2015/01/08 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
js实现选项卡效果
2020/03/07 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python 性能优化技巧总结
2016/11/01 Python
python实现ID3决策树算法
2017/12/20 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
自考生毕业自我鉴定
2013/10/10 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS