23种设计模式uml表示.doc
文本预览下载声明
Factory模式
简单工厂模式,又称静态工厂模式
工厂方法模式
3. 抽象工厂模式
抽象工厂模式与工厂方法模式的最大区别在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。
Singleton模式
要点:
类只能有一个实例
必须自行创建这个实例
必须自行向外界提供这个实例
Builder模式
Builder模式利用一个Director对象和ConcreteBuilder对象一个一个地建造出所有的零件,从而建造出完整的Product。Builder模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体的建造者零件的责任分割开来,达到责任划分和封装的目的。
使用Builder模式的场合:
需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以紧紧是产品对象的一个组成部分。
需要生成的产品对象的属性相互以来。Builder模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式便是一个很好的设计思想。
在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。
Prototype模式
通过给出一个原型对象来指明所要创建的对象的类型,然后用赋值这个原型对象的办法创建出更多同类型的对象。
Adapter模式
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作,也就是说把接口不同而功能相同或相近的多个接口加以转换。
类的Adapter模式的结构
对象的Adapter模式的结构
注意两种结构的区别:主要就是Adaptee和Adapter的关系,一个为继承关系,一个为依赖关系。
使用Adapter模式的场合:
系统需要使用现在的类,而此类的接口不符合系统的需要。
想要建立一个可以重复使用的类,用语与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
(对对象的Adapter模式而言)在设计里,需要改变多个已有的子类的接口,如果使用类的Adapter模式,就要针对每一个子类做一个Adapter类,而这不太实际。
Composite模式
把部分和整体的关系用树结构表示出来。Composite模式使得客户端把一个个单独的成分对象和由他们符合而成的合成对象同等看待。
安全式的Composite模式
透明式的Composite模式
Decorator模式
此模式又称Wrapper模式。是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
在以下情况下Decorator模式:
需要扩展一个类的功能,或给一个类增加附加责任。
需要动态地给一个对象增加功能,这些功能可以再动态的撤销。
需要增加由一些基本功能的排列组合个数的功能,从而使继承关系变得不现实。
Decorator模式的简化
没有抽象的Decorator
没有抽象接口Component
Proxy模式
Proxy模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
Flyweight模式
Flyweight模式以共享的方式高效地支持大量的细粒度对象。Flyweight对象能做到共享的关键是区分内部状态(Internal state)和外部状态(External state)。
内部状态是存储在Flyweight对象内部的,并且是不会随环境改变而有所不同的。因此,一个Flyweight可以具有内部状态并可以共享。
外部状态是随环境改变而改变的、不可以共享的状态。Flyweight对象的外部状态必须有客户端保存,并在Flyweight对象被创建之后,在需要使用的时候再传入到Flyweight对象内部。
外部状态不可以影响Flyweight对象的内部状态。它们是相互独立的。
单纯Flyweight模式的结构
复合Flyweight模式的结构
在以下所有的条件满足时,可以考虑使用Flyweight模式:
一个系统有大量的对象。
这些对象耗费大量的内存。
这些对象的状态中的大部分都可以外部化。
这些对象可以按照内部状态分成很多的组,当把外部对象从对象中删除时,每一个组都可以仅用一个对象代替。
软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。
Facade模式
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是Fa?ade模式。
在以下情况下可以使用Facade模式:
为一个复杂子系统提供一个简单接口
子系统往往因为不断演化而变得越来越复杂,使用Facade模式可以使得子系统更具有可复用性。
子系统的独立性
一般而言,子系统和其他子系统之间、客
显示全部