最常用的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数组的遍历方式for循环与for...in
Jul 31 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
Feb 22 Javascript
JavaScript中创建对象的模式汇总
Apr 19 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
Echarts基本用法_动力节点Java学院整理
Aug 11 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 21 Javascript
js实现简单掷骰子效果
Oct 24 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语法(2)
2006/10/09 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python如何给函数库增加日志功能
2020/08/04 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
一篇.NET面试题
2014/09/29 面试题
Java语言的优势
2015/01/10 面试题
企业安全生产目标责任书
2014/07/23 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
工作作风建设心得体会
2014/10/22 职场文书
华山导游词
2015/02/03 职场文书
五一劳动节慰问信
2015/02/14 职场文书
2015年新农合工作总结
2015/03/30 职场文书
七年级话题作文之执着
2019/11/19 职场文书