最常用的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 相关文章推荐
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
Nov 21 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
react-native动态切换tab组件的方法
Jul 07 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
Sep 01 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
vue计算属性computed的使用方法示例
Mar 13 Javascript
jquery使用echarts实现有向图可视化功能示例
Nov 25 jQuery
vue backtop组件的实现完整代码
Apr 07 Vue.js
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中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
python re模块的高级用法详解
2018/06/06 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python能自学吗
2020/06/18 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
企业办公室岗位职责
2014/03/12 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
遗嘱继承公证书
2014/04/09 职场文书
老员工辞职信范文
2015/05/12 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL