最常用的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 相关文章推荐
jQuery对表单的操作代码集合
Apr 06 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
webpack中引用jquery的简单实现
Jun 08 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
webpack@v4升级踩坑(小结)
Oct 08 Javascript
vue全局自定义指令-元素拖拽的实现代码
Apr 14 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
Apr 15 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
Jun 28 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无限分类的深入理解
2013/06/02 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Django中多种重定向方法使用详解
2019/07/17 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python 高阶函数简单介绍
2021/02/19 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
管道维修工岗位职责
2013/12/27 职场文书
陈欧广告词
2014/03/14 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
品酒会策划方案
2014/05/26 职场文书
小学中队活动总结
2015/05/11 职场文书
中学教师教学工作总结
2015/08/13 职场文书
Java设计模式中的命令模式
2022/04/28 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android
小程序自定义轮播图圆点组件
2022/06/25 Javascript