最常用的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 相关文章推荐
驱动事件的addEvent.js代码
Mar 27 Javascript
用jquery写的一个万年历(自写)
Jan 20 Javascript
node.js Web应用框架Express入门指南
May 28 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
Vue.js每天必学之内部响应式原理探究
Sep 07 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
Vue 实现树形视图数据功能
May 07 Javascript
详解Vue中使用插槽(slot)、聚类插槽
Apr 12 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
Jun 01 Javascript
React服务端渲染原理解析与实践
Mar 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
python实现按行切分文本文件的方法
2016/04/18 Python
详解flask表单提交的两种方式
2018/07/21 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
保安员岗位职责
2013/11/17 职场文书
廉政教育心得体会
2014/01/01 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
建国大业观后感600字
2015/06/01 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
python实现双链表
2022/05/25 Python