一、写在前面
刚开学,趁着有时间把设计模式重新整理一次。学好设计模式是走向架构的第一步,系统架构应该朝着可维护,可扩展,强壮性好的方向去发展。大学的最后一个学期了,时间不多了,3月初就要去腾讯实习了,还有毕设。加油 :)
二、常见的模式分类
创建模式
|
结构模式
|
行为模式
|
简单工厂模式
|
适配器模式
|
不变模式
|
工厂方法模式
|
缺省适配模式
|
策略模式
|
抽象工厂模式
|
合成模式
|
模版方法模式
|
单例模式
|
装饰模式
|
观察者模式
|
多例模式
|
代理模式
|
迭代子模式
|
建造模式
|
享元模式
|
责任链模式
|
原始模型模式
|
门面模式
|
命令模式
|
|
桥梁模式
|
备忘录模式
|
|
|
状态模式
|
|
|
访问者模式
|
|
|
解释器模式
|
|
|
调停者模式
|
三、主要模式的定义和描述
以下内容来自《head first 设计模式》一书
模式
|
定义
|
描述
|
装饰者
|
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
|
包装一个对象,以提供新的行为
|
状态
|
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类
|
封装了基本状态的行为,并使用委托在行为之间切换
|
迭代器
|
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示
|
在对象的集合之中游走,而不暴露集合的实现
|
外观(门面)
|
提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更多容易使用
|
简化一群类的接口
|
策略
|
定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
|
封装可以互换的行为,并使用委托来决定使用那一种
|
代理
|
为另一个对象提供一个替身或点位符以访问这个对象
|
包装对象,以控制对此对象的访问
|
工厂方法
|
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类
|
由子类决定要创建是具体类是哪一个
|
抽象工厂
|
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
|
允许客户创建对象的家族,而无需指定他们的具体类
|
适配器
|
将一个类的接口,转换成客户期望另一个接口。适配器让原来不兼容的类可以合作无间
|
封装对象,并提供不同的接口
|
观察者
|
在对象之间定义一对多的依赖,这样一来,当一个对象改变时,依赖它的对象都会收到通知并自动更新
|
让对象能够在状态改变时被通知
|
模板方法
|
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
|
由子类决定如何实现一个算法中的步骤
|
组合
|
允许你将对象组成树结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合
|
客户用一致的方式处理对象集合和单个对象
|
单件(单体)
|
确保一个类只有一个实例,并提供全局访问点
|
确保只有一个对象被创建
|
命令
|
将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其它对象。命令模式也可以支持撤销操作
|
封装请求为对象
|
四、参考资料
IBM社区设计模式方面资料: http://www.ibm.com/developerworks/cn/java/design/
常见OO原则:http://www.blogjava.net/jicheng687/archive/2011/02/13/344174.html
--END--