最常用的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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
拖拉表格的JS函数
Nov 20 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
js格式化时间的方法
Dec 18 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
vue获取input输入值的问题解决办法
Oct 17 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 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数组中删除元素的实现代码
2012/06/22 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
使用python加密自己的密码
2015/08/04 Python
python实战教程之自动扫雷
2018/07/13 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
python函数超时自动退出的实操方法
2020/12/28 Python
蒂娜商店:Tiina the Store
2019/12/07 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
党员批评与自我批评
2014/02/12 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
python 中的@运算符使用
2021/05/26 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
MySql数据库 查询时间序列间隔
2022/05/11 MySQL
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers