最常用的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之锁定表格栏位
Jun 29 Javascript
屏蔽script注入小例子
Nov 12 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
js获取时间函数及扩展函数的方法
Oct 30 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
lib.utf.js
2007/08/21 Javascript
Expandable "Detail" Table Rows
2007/08/29 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
vue-ajax小封装实例
2017/09/18 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
JS随机密码生成算法
2019/09/23 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
公司JAVA开发面试题
2015/04/02 面试题
写给爸爸的道歉信
2014/01/15 职场文书
大学生饮食连锁店创业计划书
2014/01/17 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
工作目标责任书
2014/07/23 职场文书
捐助倡议书
2015/01/19 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
2016年元旦寄语
2015/08/17 职场文书