最常用的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 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
浅析hasOwnProperty方法的应用
Nov 20 Javascript
JavaScript拆分字符串时产生空字符的解决方案
Sep 26 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
jQuery实现行文字链接提示效果的方法
Mar 10 Javascript
js性能优化技巧
Nov 29 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 Javascript
微信小程序常用赋值方法小结
Apr 30 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python实现类之间的方法互相调用
2018/04/29 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
django和vue实现数据交互的方法
2019/08/21 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
零基础小白多久能学会python
2020/06/22 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
专项资金申请报告
2015/05/15 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL