创建型 实现,继承<br>
Abstract Factory (抽象工厂)<br>
意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
结构<br>
AbstractFactory
声明一个创建抽象产品对象的操作接口<br>
Concrete(具体的)Factory<br>
实现创建具体产品对象的操作<br>
AbstractProduct
为一类产品对象声明一个接口<br>
ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct<br>
Cilent <br>
仅使用由AbstractFactory和AbstractProduct类声明的接口<br>
适用性
一个系统独立于产品创建<br>
一个系统要由多个产品系列中的一个来配置
说明结构有两种不同的产品组合使用的情况
Builder(生成器)
意图 <br>
将一个复杂对象的构建与他的表示分离,是的同样的构建过程可以创建不同的表示
结构
Builder<br>
创建一个Product对象的各个部件指定抽象接口<br>
ConcrateBuilder <br>
实现builder接口<br>
Director <br>
指定一个使用Builder接口的对象<br>
适用性
当构造过程必须允许被构造对象有不同表示时
复杂对象算法应该独立于该对象的组成部分时
Factory Method<br>
意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类<br>
结构 <br>
ConcreteProduct <br>
实现Product接口<br>
Creator
声明工厂方法,该方法返回一个Product对象
ConcreteCreator<br>
返回ConCreteProduct实例<br>
适用性
一个类不知道对象的类<br>
一个类希望由他子类指定
类将创建对象的职责交个子类
Prototype(原型)
意图
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象
结构<br>
ConcretePrototype
实现Prototype接口<br>
适用性
一个系统独立于他的产品创建
动态装载
避免创建一个与产品类层次平行的工程类层次时
Singleton (单例)<br>
适用性
只有一个实例
唯一实例可通过子类化扩展<br>
总
Abstract Factory和Builder和Prototype关键特征“工厂对象”,其中工厂对象和原型为同一个对象
结构型 接口,组合<br>
Adapter(适配器)
结构
Target
定义C李恩同事用的与特定领域相关的接口
Adaptee
定义一个已经存在的接口,这个接口需要适配
Adapter
对Adaptee与Target接口适配
适用性
已经存在的类但接口不符合要求
可以与其他不相关类协同工作
不可能对每一个类都进行子类化以匹配他们的接口
Bridge(桥接)
结构
RefinedAbstraction
扩充由Abstraction定义的接口
ConcreteImplementor
实现Implementor接口
适用性
不希望有绑定关系
类的抽象以及他的实现都应该可以通过生成子类的方法加以扩充
客户代码不必从新翻译
完全隐藏抽象的实现部分
想在多个对象间共享实现,但同时要求客户并不知道这一点
Composite(组合)
结构
Client
通过Component接口操纵组合组件对象
适用性
部分-整体
希望用户忽略组合对象与单个对象的不同
Decorator(装饰)
结构
Component
定义一个对象接口,可以给这些对象动态的添加职责
Decorator
维持一个指向Component对象的指针
ConcreteDrcorator
向组件添加职责<br>
适用性
添加职责
处理那些可以撤销的职责
当不能采用生成子类的1方法进行扩充时
Facade(外观)
结构
Subsystem classes<br>
实现子系统的功能
适用性
为复杂子系统提供一个简单接口
客户程序与抽象类的实现部分之间存在很大的依赖性,为提高独立性和移植性
当需要构建一个层次结构的系统时
总
Adapter模式和Bridge模式的区别:适配器在类定以后使用,桥接在类定义前
Composite和Decorator通常协同使用
行为型 功能,状态,行为,职责分配<br>
Chain of Responsibility(责任链)<br>
适用性
多个对象处理一个请求
想在不明确指定接收者的情况下向多个对象中的一个提交一个请求
Command(命令)
适用性
支持取消操作
支持修改日志<br>
在不同的时刻指定,排列和执行请求
Mediator(中介者)
适用性<br>
一组对象之间的复杂通信
通信直接
不想生成太多子类
Memento(备忘录)
适用性
保存状态<br>
在会被破坏封装性的情况下<br>
Observer(观察者)
意图
一个对象状态改变,其余依赖他的对象接到通知并被自动更新
State(状态)<br>
适用性
根据状态改变行为
一个操作中含有庞大的多分支语句,且这些分支依赖于该对象的状态
Strategy(策略)
意图
定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换
适用性<br>
许多相关的类仅仅是行为有异<br>
需要使用一个算法的行为变体
算法使用客户不应该知道的数据
一个类定义了多种行为
Template Method(模板方法)<br>