23种设计模式uml表示.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《23种设计模式uml表示.doc》由会员分享,可在线阅读,更多相关《23种设计模式uml表示.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Factory模式1. 简单工厂模式,又称静态工厂模式2. 工厂方法模式3. 抽象工厂模式抽象工厂模式与工厂方法模式的最大区别在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。Singleton模式要点:l 类只能有一个实例l 必须自行创建这个实例l 必须自行向外界提供这个实例Builder模式Builder模式利用一个Director对象和ConcreteBuilder对象一个一个地建造出所有的零件,从而建造出完整的Product。Builder模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体的建造者零件的责任分割开来
2、,达到责任划分和封装的目的。使用Builder模式的场合:l 需要生成的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以紧紧是产品对象的一个组成部分。l 需要生成的产品对象的属性相互以来。Builder模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式便是一个很好的设计思想。l 在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。Prototype模式通过给出一个原型对象来指明所要创建的对象的类型,然后用赋值这个原型对象的办法创建出更多同类型的对象。Adapter模式把一个类
3、的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作,也就是说把接口不同而功能相同或相近的多个接口加以转换。1. 类的Adapter模式的结构2. 对象的Adapter模式的结构注意两种结构的区别:主要就是Adaptee和Adapter的关系,一个为继承关系,一个为依赖关系。使用Adapter模式的场合:l 系统需要使用现在的类,而此类的接口不符合系统的需要。l 想要建立一个可以重复使用的类,用语与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。l (对对象的Adapter模式而言)在设计里,需要
4、改变多个已有的子类的接口,如果使用类的Adapter模式,就要针对每一个子类做一个Adapter类,而这不太实际。Composite模式把部分和整体的关系用树结构表示出来。Composite模式使得客户端把一个个单独的成分对象和由他们符合而成的合成对象同等看待。1. 安全式的Composite模式2. 透明式的Composite模式Decorator模式此模式又称Wrapper(包装材料,包装纸, 书皮)模式。是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。在以下情况下Decorator模式:l 需要扩展一个类的功能,或给一个类增加附加责任。l 需要动态地给一个对象增加功能,这
5、些功能可以再动态的撤销。l 需要增加由一些基本功能的排列组合个数的功能,从而使继承关系变得不现实。Decorator模式的简化1. 没有抽象的Decorator2. 没有抽象接口ComponentProxy模式Proxy模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。Flyweight模式Flyweight模式以共享的方式高效地支持大量的细粒度对象。Flyweight对象能做到共享的关键是区分内部状态(Internal state)和外部状态(External state)。内部状态是存储在Flyweight对象内部的,并且是不会随环境改变而有所不同的。因此,一个Flywe
6、ight可以具有内部状态并可以共享。外部状态是随环境改变而改变的、不可以共享的状态。Flyweight对象的外部状态必须有客户端保存,并在Flyweight对象被创建之后,在需要使用的时候再传入到Flyweight对象内部。外部状态不可以影响Flyweight对象的内部状态。它们是相互独立的。1. 单纯Flyweight模式的结构2. 复合Flyweight模式的结构在以下所有的条件满足时,可以考虑使用Flyweight模式:l 一个系统有大量的对象。l 这些对象耗费大量的内存。l 这些对象的状态中的大部分都可以外部化。l 这些对象可以按照内部状态分成很多的组,当把外部对象从对象中删除时,每一
7、个组都可以仅用一个对象代替。l 软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。Facade模式外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是Faade模式。在以下情况下可以使用Facade模式:l 为一个复杂子系统提供一个简单接口子系统往往因为不断演化而变得越来越复杂,使用Facade模式可以使得子系统更具有可复用性。l 子系统的独立性一般而言,子系统和其他子系统之间、客户端和实现化层之间存在着很大的依赖性。引入Facade模式将一个子系统与它的客户端以及其他的子系统分离,可以提高子系统的独立性和可移植性。l 层次化结构在构建一个层次化的系统时
8、,可以使用Facade模式定义系统中每一层的入口。如果层与层之间是相互依赖的,则可以限定它们仅通过Facade模式进行通信,从而简化层与层之间的依赖关系。Bridge模式Bridge模式的用意是“将抽象化与实现化解耦,使得二者可以独立地变化。”Bridge模式比较难于理解,下面对其给出详细的解释。“找到系统的可变因素,将之封装起来”,通常就叫做“对变化的封装”。对变化的封装实际上是达到“开-闭”原则的途径,与组合/聚合服用原则相辅相成。抽象化与实现化的最简单实现,也就是“开-闭”原则在类层次上的最简单实现,如下图所示。一般来说,一个继承结构中的第一层是抽象角色,封装了抽象的商业逻辑,这是系统中
9、的不变的部分。第二层是实现角色,封装了设计中会变化的因素。这个实现允许实现化角色有多态性变化,如下图所示。换言之,客户端可以持有抽象化类型的对象,而不在意对象的真实类型是“实现化”、 “实现化1”还是“实现化2”,如下图所示。显然,每一个继承关系都封装了一个变化因素,而一个继承关系不应当同时处理两个变化因素。换言之,这种简单实现不能够处理抽象化与实现化都面临变化的情况,如下图所示。上图中的两个变化因素应当是彼此独立的,可以在不影响另一者的情况下独立演化。比如,下面的两个等级结构分别封装了自己的变化因素,由于每一个变化因素都是可以通过静态关系表达的,因此分别使用继承关系实现,如下图所示。那么在抽
10、象化与实现化之间的变化怎么办呢?正确的设计方案应当是使用两个独立的等级结构封装两个独立的变化因素,并在他们之间使用聚合关系,以此达到功能复用的目的。根据上面的分析,在以下情况下应当使用Bridge模式:l 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。l 设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。l 一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。l 虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。Immut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 23 设计 模式 uml 表示
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内