一、分类(创建、结构和行为型)
创建型
1、系统架构技能之设计模式-单件模式
2、系统架构技能之设计模式-工厂模式
3、系统架构技能之设计模式-抽象工厂模式
4、系统架构技能之设计模式-创建者模式
5、系统架构技能之设计模式-原型模式
结构型
1、系统架构技能之设计模式-组合模式
2、系统架构技能之设计模式-外观模式
3、系统架构技能之设计模式-适配器模式
4、系统架构技能之设计模式-桥模式
5、系统架构技能之设计模式-装饰模式
6、系统架构技能之设计模式-享元模式
7、系统架构技能之设计模式-代理模式
行为型
1、系统架构技能之设计模式-命令模式
2、系统架构技能之设计模式-观察者模式
3、系统架构技能之设计模式-策略模式
4、系统架构技能之设计模式-职责模式
5、系统架构技能之设计模式-模板模式
6、系统架构技能之设计模式-中介者模式
7、系统架构技能之设计模式-解释器模式
二、创建型设计模式
(1)单件模式
单例模式:是一种软件设计中常用的设计模式,主要是用来控制某个类必须在某个应用程序中只能有一个实例存在。
具体实现分为外部控制方式:单件的对象外面包一层。
内部控制方式:单击的对象本身,没有外包一层,要注意此时构造函数应为私有的,不对外暴漏。
难点在于多线程的情况,具体参加:http://www.cnblogs.com/hegezhou_hot/archive/2010/10/02/1841390.html
(2)工厂模式和简单工厂模式
工厂模式是创建型模式中最典型的模式,主要是用来创建对象,减少我们在使用某个对象时的new() 操作。
(3)抽象工厂模式
三种工厂模式的异同点:
相同点:
1、都是为客户调用程序与具体的对象类型之间提供了一个解耦作用,这里怎么说呢?其实就是应用程序不关心这个对象是怎么出来的,只关系如何使用这个对象,而且以后就算对象发生变化,那么也不需
要修改用户应用程序的代码。
2、提高了程序的可维护性和低耦合性。
不同点:
1、简单工厂模式:是简单的一些列没有任何依赖关系的对象的创建,内部包含复杂的逻辑关系,一半是通过配置或者参数来进行创建对象,适合对象类型不多,并且不会经常新增的情况下。
工厂模式:每个工厂负责具体类型对象的创建,提供了可以动态新增产品类型的创建,并不需要修改现有的程序就可以无缝的新增产品类型。
抽象工厂模式:支持动态的新增对象类型和新增工厂类型,实现多种依赖关系的对象或者组合关系的创建,适合现有项目中的对象创建过程。
2、简单工厂模式:内部逻辑复杂,不符合高内聚的原则。
工厂模式:每次新增一个对象类型,就必须新增一个对应的创建工厂,无疑这是一个非常大的工作量。
抽象工厂模式:是在简单工厂模式的基础上经过改进具有前2个模式的优点,又屏蔽了他们的一些缺点。
(4)创建者模式
创建者模式:将构造复杂对象的过程和组成对象的部件解耦。就像攒电脑一样,不管什么品牌的配件,只要兼容就可以装上。
举个例子:前几天陪朋友去装机店攒了一台电脑,看着装机工在那里熟练的装配着机器,不禁想起来了培训时讲到的建造模式。作为装机工,他们不用管你用的CPU 是Intel 还是AMD,也不管你的显卡是2000 千大元还是白送的,都能三下五除二的装配在一起——一台PC 就诞生了!当然对于客户来说,你也不知道太多关于PC 组装的细节。
建造者模式使用的场景,一是产品类非常的复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合适。
创建者模式类图:
创建者模式的优点:建造模式可以使得产品内部的表象独立变化。在原来的工厂方法模式中,产品内部的表象是由产品自身来决定的;而在建造模式中则是“外部化”为由建造者来负责。这样定义一个新的具体建造者角色就可以改变产品的内部表象,符合“开闭原则”。
创建者模式的例子最好看“设计模式之禅”上面的。
(5)原型模式
原型模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式与其它创建型模式有着相同的特点:它们都将具体产品的创建过程进行包装,使得客户对创建不可知。就像上面例子中一样,客户程序仅仅知道一个抽象产品的接口。当然它还有过人之处:
通过增加或者删除原型管理器中注册的对象,可以比其它创建型模式更方便的在运行时增加或者删除产品。
如果一个对象的创建总是由几种固定组件不同方式组合而成;如果对象之间仅仅实例属性不同。将不同情况的对象缓存起来,直接克隆使用。也许这比采用传递参数重新new 一个对象要来的快一些。
类图:
总之,由于 clone 方法在java 实现中有着一定的弊端和风险,所以clone 方法是不建议使用的。因此很少能在java 应用中看到原型模式的使用。但是原型模式还是能够给我们一些启迪。
二、结构型设计模式
(1)