最常用的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 版本]
Mar 20 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
May 16 Javascript
js网页右下角提示框实例
Oct 14 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
webpack4.x CommonJS模块化浅析
Nov 09 Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
如何利用JavaScript实现二叉搜索树
Apr 02 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php 异常处理实现代码
2009/03/10 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
js比较日期大小的方法
2015/05/12 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
关于vue面试题汇总
2018/03/20 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
python 实现插入排序算法
2012/06/05 Python
python发送邮件功能实现代码
2016/07/15 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
python基础教程项目三之万能的XML
2018/04/02 Python
儿童学习python的一些小技巧
2018/05/27 Python
浅析Django中关于session的使用
2019/12/30 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
几个常见的软件测试问题
2016/09/07 面试题
体育课外活动总结
2014/07/08 职场文书
趣味运动会赞词
2015/07/22 职场文书
观看《信仰》心得体会
2016/01/15 职场文书