最常用的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 相关文章推荐
载入进度条 效果
Jul 08 Javascript
对联广告js flash激活
Oct 19 Javascript
js右键菜单效果代码
Jul 21 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
详解Vue 动态组件与全局事件绑定总结
Nov 11 Javascript
微信小程序入门之广告条实现方法示例
Dec 05 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 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
初学CAKEPHP 基础教程
2009/11/02 PHP
php中设置多级目录session的问题
2011/08/08 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
JS 文件大小判断的实现代码
2010/04/07 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
python中循环语句while用法实例
2015/05/16 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
python else语句在循环中的运用详解
2020/07/06 Python
详解pandas赋值失败问题解决
2020/11/29 Python
打架检讨书100字
2014/01/08 职场文书
大学开学计划书
2014/04/30 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
springboot读取resources下文件的方式详解
2022/06/21 Java/Android