最常用的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 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
jquery实现ajax提交form表单的方法总结
Mar 03 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
JS获取checkbox的个数简单实例
Aug 19 Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
Dec 11 Javascript
jq checkbox 的全选并ajax传参的实例
Apr 01 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
vuex的使用及持久化state的方式详解
Jan 23 Javascript
webpack优化的深入理解
Dec 10 Javascript
Vue引入Stylus知识点总结
Jan 16 Javascript
如何使用three.js 制作一个三维的推箱子游戏
Jul 29 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 远程关机实现代码
2009/11/10 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
koa源码中promise的解读
2018/11/13 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Tostadora意大利:定制T恤
2019/04/08 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
高级护理专业大学生求职信
2013/10/24 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
化工操作工岗位职责
2014/04/29 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
医学检验专业自荐信
2014/09/18 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis