16.状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改不了其类
主要解决的是当控制一个对象状态改变的条件表达过于复杂时的情况,把状态的判断逻辑转移到表示不同转态行为的一系列类当中,可以把复杂的判断逻辑简化
17.适配器模式 将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。
18.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态
Originitor 发起人 属性 state
行为 setMemento(Memento m)恢复状态
CreateMemento() 产生一个备份
Memento 备忘录 属性 state
行为 setState
getState
Caretaker 管理者 属性 Memneto
行为 setMemento
getMemento
备份 发起人产生一个备份(CreateMemento)传递给管理者(setMemento)
恢复 管理者返回备份(getMemento)传递给发起人(setMemento)
19.组合模式 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
基类 Component 属性 name
行为 Add(Component component)
Remove(Component component)
Display(int depth)
派生类 叶子Leaf 实现基类方法 1叶子无法添加和删除子节点
2. Display(int depth) 输出name
分支节点 Composite 属性 一个Component 链表存储其子节点
Add 添加节点
Remove 删除节点
Display 输出所有节点
20.迭代器模式(Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露各个对象的内部表示。
21.单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点
1.将构造函数私有化
2.添加一个私有静态对象引用
3.提供一个全局静态函数来返回改引用 且保证只产生一个实例
22.合成、聚合复用原则: (当类直接关系较弱时)尽量使用合成、聚合,尽量不要使用类继承。
23.桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
即当一个类具有多种分类方式时,可将每一种分类作为基类抽象的合成部分,而不采用继承。这样抽象可以通过set来指定其每种分类(实现)的具体情况。
抽象:Abstraction 属性 protected ImplementorA implementora
protected ImplementorB implementorb
行为 Operation
setImplementor
实现(分类) A类分类法 ImplementorA 行为 OperationImpA
具体类别 ConcreteImplementorA1
ConcreteImplementorA2
B类分类法 ImplementorB 行为 OperationImpB
具体类别 ConcreteImplementorB1
ConcreteImplementorB2
24.命令模式 将一个请求封装为对象,从而可以用不同的请求对客户进行参数化;其它操作:对请求进行排队、记录请求日志,以及支持可撤销的操作。
优点 将请求的发出 和请求的具体执行分开
目录执行者 Receiver 行为 Action 执行请求
命令 抽象 Command 属性 Receiver reciver 目录执行者
行为 Execute 执行命令
具体目录 ConcreteCommand 实现父类
命令传递者 Invoker 属性 Command command;
行为 setCommand 设置传递的命令
ExecuteCommand 执行传递的命令
25.职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,并沿着这条连传递该请求,知道有一个对象处理它为止。
优点 接受者和发送者都没有对方的明确信息,且链中的对象自己也并不知道完整的链结构。结果是职责链可简化对象的相互连接,他们仅需保持一个指向其后继者的
引用,而不须保持他所有的后继者,这就大大降低了耦合度。
请求 Request 自定义
处理者 Abstract Hander 属性 protected Hander successor 继任者
行为 setSuccessor 设置继任者
abstract HandleRequest(Request)
ConcreteHander1 实现 HandleRequest方法 判断是否有权利处理该请求,有则处理,无则继任者处理该请求
ConcreteHander2
26.中介者模式 用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
缺点 当对象比较多时,中介者类会显得非常复杂
同事 abstract Colleague 属性 protected Meddiator mediator; 中介者
具体 ConcreteColleague 行为 send(Message message,Colleage colleague) 发送信息
notify(Message message) 接收信息
中介者 abstract Mediator 行为 abstract send(Message message,Colleage colleague);
具体 ConcreteMediator 属性 :所有的同事对象引用
行为 所有的同事对象引用的设置器
实现Send(Message message,Colleage colleague)
27.享元模式 运用共享技术有效的支持大量细粒度的对象。
内部状态 所有共享对象共有的属性
外部状态 每个对象独立的属性,可作为每个对象行为的参数传递
如果一个应用程序使用了大量的对象,而这些对象具有很多共性时应考虑使用享元模式。
外部状态类 Extrinsicstate
共享类 Flyweight 行为 Operation(Extrinsicstate extrinsicstate);
具体 共享类 ConcreteFlyweight
不共享的类 UnsharedConcreteFlyweight
享元工厂 FlyweightFactory 属性 共享类类型的<String,Flyweight>Hashtable 存储所有已生成的共享实例
行为 getFlyweight(String key) 返回共享实例
28.解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
应用 正则表达式
语句Contex 属性 input
output
抽象表达式 AbstractExpression 行为 abstract Interpret(Context context)
实际表达式 终结符表达式 TerminalExpression
非终结符表达 NonTerminalExpressionA, NonTerminalExpressionB…… 每一种表达式都定义一中解释
29.访问者模式 表示一个作用于某对象结构中各元素(对象)的操作。它使得可以在不改变各元素的类结构的前提下定义作用于这些元素的新操作。
元素 abstract Element 行为 abstract Accept(Visitor visitor)
具体 ConcreteElementA 实现 Accept(Visitor visitor){visitor.VisitConcreteElementA(this)}
ConcreteElementB 实现 Accept(Visitor visitor){visitor.VisitConcreteElementB(this)}
访问者 abstract Visitor VisitConcreteElementA(ConcreteElementA ConcreteElementA)
VisitConcreteElementB(ConcreteElementB ConcreteElementB)
具体 ConcreteVisitorA
ConcreteVisitorB
对象数据结构 ObjectStructure 属性 Element 线性表 ArrayList arraylist
行为 Attach(Element element) 添加元素
Detach(Element element) 移除元素
Accept(Visitor visitor ){
for (Element element : arrayList) {
element.Accept(visitor);
}
}
主要解决的是当控制一个对象状态改变的条件表达过于复杂时的情况,把状态的判断逻辑转移到表示不同转态行为的一系列类当中,可以把复杂的判断逻辑简化
17.适配器模式 将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。
18.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态
Originitor 发起人 属性 state
行为 setMemento(Memento m)恢复状态
CreateMemento() 产生一个备份
Memento 备忘录 属性 state
行为 setState
getState
Caretaker 管理者 属性 Memneto
行为 setMemento
getMemento
备份 发起人产生一个备份(CreateMemento)传递给管理者(setMemento)
恢复 管理者返回备份(getMemento)传递给发起人(setMemento)
19.组合模式 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
基类 Component 属性 name
行为 Add(Component component)
Remove(Component component)
Display(int depth)
派生类 叶子Leaf 实现基类方法 1叶子无法添加和删除子节点
2. Display(int depth) 输出name
分支节点 Composite 属性 一个Component 链表存储其子节点
Add 添加节点
Remove 删除节点
Display 输出所有节点
20.迭代器模式(Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露各个对象的内部表示。
21.单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点
1.将构造函数私有化
2.添加一个私有静态对象引用
3.提供一个全局静态函数来返回改引用 且保证只产生一个实例
22.合成、聚合复用原则: (当类直接关系较弱时)尽量使用合成、聚合,尽量不要使用类继承。
23.桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
即当一个类具有多种分类方式时,可将每一种分类作为基类抽象的合成部分,而不采用继承。这样抽象可以通过set来指定其每种分类(实现)的具体情况。
抽象:Abstraction 属性 protected ImplementorA implementora
protected ImplementorB implementorb
行为 Operation
setImplementor
实现(分类) A类分类法 ImplementorA 行为 OperationImpA
具体类别 ConcreteImplementorA1
ConcreteImplementorA2
B类分类法 ImplementorB 行为 OperationImpB
具体类别 ConcreteImplementorB1
ConcreteImplementorB2
24.命令模式 将一个请求封装为对象,从而可以用不同的请求对客户进行参数化;其它操作:对请求进行排队、记录请求日志,以及支持可撤销的操作。
优点 将请求的发出 和请求的具体执行分开
目录执行者 Receiver 行为 Action 执行请求
命令 抽象 Command 属性 Receiver reciver 目录执行者
行为 Execute 执行命令
具体目录 ConcreteCommand 实现父类
命令传递者 Invoker 属性 Command command;
行为 setCommand 设置传递的命令
ExecuteCommand 执行传递的命令
25.职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,并沿着这条连传递该请求,知道有一个对象处理它为止。
优点 接受者和发送者都没有对方的明确信息,且链中的对象自己也并不知道完整的链结构。结果是职责链可简化对象的相互连接,他们仅需保持一个指向其后继者的
引用,而不须保持他所有的后继者,这就大大降低了耦合度。
请求 Request 自定义
处理者 Abstract Hander 属性 protected Hander successor 继任者
行为 setSuccessor 设置继任者
abstract HandleRequest(Request)
ConcreteHander1 实现 HandleRequest方法 判断是否有权利处理该请求,有则处理,无则继任者处理该请求
ConcreteHander2
26.中介者模式 用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
缺点 当对象比较多时,中介者类会显得非常复杂
同事 abstract Colleague 属性 protected Meddiator mediator; 中介者
具体 ConcreteColleague 行为 send(Message message,Colleage colleague) 发送信息
notify(Message message) 接收信息
中介者 abstract Mediator 行为 abstract send(Message message,Colleage colleague);
具体 ConcreteMediator 属性 :所有的同事对象引用
行为 所有的同事对象引用的设置器
实现Send(Message message,Colleage colleague)
27.享元模式 运用共享技术有效的支持大量细粒度的对象。
内部状态 所有共享对象共有的属性
外部状态 每个对象独立的属性,可作为每个对象行为的参数传递
如果一个应用程序使用了大量的对象,而这些对象具有很多共性时应考虑使用享元模式。
外部状态类 Extrinsicstate
共享类 Flyweight 行为 Operation(Extrinsicstate extrinsicstate);
具体 共享类 ConcreteFlyweight
不共享的类 UnsharedConcreteFlyweight
享元工厂 FlyweightFactory 属性 共享类类型的<String,Flyweight>Hashtable 存储所有已生成的共享实例
行为 getFlyweight(String key) 返回共享实例
28.解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
应用 正则表达式
语句Contex 属性 input
output
抽象表达式 AbstractExpression 行为 abstract Interpret(Context context)
实际表达式 终结符表达式 TerminalExpression
非终结符表达 NonTerminalExpressionA, NonTerminalExpressionB…… 每一种表达式都定义一中解释
29.访问者模式 表示一个作用于某对象结构中各元素(对象)的操作。它使得可以在不改变各元素的类结构的前提下定义作用于这些元素的新操作。
元素 abstract Element 行为 abstract Accept(Visitor visitor)
具体 ConcreteElementA 实现 Accept(Visitor visitor){visitor.VisitConcreteElementA(this)}
ConcreteElementB 实现 Accept(Visitor visitor){visitor.VisitConcreteElementB(this)}
访问者 abstract Visitor VisitConcreteElementA(ConcreteElementA ConcreteElementA)
VisitConcreteElementB(ConcreteElementB ConcreteElementB)
具体 ConcreteVisitorA
ConcreteVisitorB
对象数据结构 ObjectStructure 属性 Element 线性表 ArrayList arraylist
行为 Attach(Element element) 添加元素
Detach(Element element) 移除元素
Accept(Visitor visitor ){
for (Element element : arrayList) {
element.Accept(visitor);
}
}