最常用的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库还是自己写代码?
Jan 28 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 Javascript
使用Promise解决多层异步调用的简单学习心得
May 17 Javascript
浅谈jquery选择器 :first与:first-child的区别
Nov 20 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
Jun 16 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
查看django版本的方法分享
2018/05/14 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
Python实现异步IO的示例
2020/11/05 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
实习生评语
2014/04/26 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
社区服务活动报告
2015/02/05 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
如何使用vue3打造一个物料库
2021/05/08 Vue.js
python中取整数的几种方法
2021/11/07 Python