《Head First设计模式》阅读笔记.其他设计模式
1、附录A部分-剩下的模式
桥接(Bridge)模式:不只改变你的实现,也改变你的抽象。
*桥接模式通过将实现和抽象放在两个不同的类层次中,而使它们可以独立改变。
桥接的优点:
引用--------------------------------------------
一、将实现予以解耦,让它和界面之间不再永久绑定。
二、抽象和实现可以独立扩展,不会影响到对方。
三、对于“具体实现类”所做的改变,不会影响到客户。
--------------------------------------------
桥接的用途和缺点:
引用--------------------------------------------
一、适合用在需要跨越多个平台的图形和窗口系统上。
二、当需要不同的方式改变接口和实现时,你会发现桥接模式很好用。
三、桥接模式的缺点是增加了复杂度。
--------------------------------------------
生成器(Builder)模式:封装一个产品的构造过程,并允许按步骤构造。
生成器的优点:
引用--------------------------------------------
一、将一个复杂对象的创建过程封装起来。
二、允许对象通过多个步骤来创建,并且可以改变过程,这和只有一个步骤的工厂模式不同。
三、向客户隐藏产品内部的表现。
四、产品的实现可以被替换,因为客户只看到一个抽象的接口。
--------------------------------------------
生成器的用途和缺点:
引用--------------------------------------------
一、经常被用来创建组合结构。
二、与工程模式相比,采用生成器模式创建对象的客户,需要更多的领域知识。
--------------------------------------------
责任链(Chain of Responsibility)模式:为某个请求创建一个对象链。每个对象依序检查此请求,并对其进行处理,或将它传给链中的下一个对象。
责任链的优点:
引用--------------------------------------------
一、将请求的发送者和接受者解耦。
二、可以简化你的对象,因为它不需要知道链的结构。
三、通过改变链内的成员或调动它们的顺序,允许你动态地新增或删除责任。
--------------------------------------------
责任链的用途和缺点:
引用--------------------------------------------
一、经常被用在窗口系统中,处理鼠标和键盘之类的事件。
二、并不保证请求一定被执行;如果没有任何对象处理它的话,它可能会落到链尾端之外(这可以是优点也可以是缺点)。
三、可能不容易观察运行时的特征,有碍于除错。
--------------------------------------------
蝇量(Flyweight)模式:让某个类的一个实例能用来提供许多“虚拟实例”。
*蝇量模式只用一个实例和一个客户对象来维护所有状态。
蝇量的优点:
引用--------------------------------------------
一、减少运行时对象实例的个数,节省内存。
二、将许多“虚拟”对象的状态集中管理。
--------------------------------------------
蝇量的用途和缺点:
引用--------------------------------------------
一、当一个类有许多实例,而这些实例能被同一个方法控制的时候,我们就使用蝇量模式。
二、蝇量模式的缺点在于,一旦你使用了它,那么单个的逻辑实例将无法拥有独立而不同的行为。
--------------------------------------------
解释器(Interpreter)模式:为语言创建解释器。
解释器模式的优点:
引用--------------------------------------------
一、将每一个语法规则表示成一个类,方便语言的实现。
二、因为语法由许多类表示,所以你可以轻易地改变或扩展此语言。
三、通过在类结构中加入新的方法,可以在解释时同时增加新的行为。例如打印格式的美化或者进行复杂的验证。
--------------------------------------------
解释器模式的用途和缺点:
引用--------------------------------------------
一、当你需要实现一个简单的语言时,使用解释器。
二、当你有一个简单的语法,而且简单比效率重要时,使用解释器。
三、可以处理脚本语言和编程语言。
四、当语法规则的数目太大时,这个模式可能会变得非常复杂。在这种情况下,使用解析器/编译器的生成器可能更合适。
--------------------------------------------
中介者(Mediator)模式:集中相关对象之间复杂的沟通和控制方式。
*每个对象都会在自己的状态改变时告诉中介者。
*每个对象都会对中介者发出的请求作出回应。
*在没有中介者的时候,所有对象都要认识其他对象,也就是说对象之间是紧耦合的。有了中介者之后,对象之间彻底解耦。
*中介者内包含了整个系统的控制逻辑。当某个装置需要一个新规则,或者一个新的装置被加入系统内,其所需要的所有逻辑都被加入中介者内。
中介者的优点:
引用--------------------------------------------
一、通过将对象之间彼此解耦,可以增加对象的复用性。
二、通过将控制逻辑集中,可以简化系统的维护。
三、可以让对象之间传递的逻辑变得简单而且大幅减少。
--------------------------------------------
中介者的用途和缺点:
引用--------------------------------------------
一、中介者常常被用来协调相关的GUI组件。
二、中介者模式的缺点是,如果设计不当,中介者本身会变得过于复杂。
--------------------------------------------
备忘录(Memento)模式:当需要对象返回之前的状态时(例如:你的用户请求“撤销”),就用到备忘录模式。
*备忘录模式有两个目标:
引用--------------------------------------------
一、储存系统关键对象的重要状态。
二、维护关键对象的封装。
--------------------------------------------
备忘录的优点:
引用--------------------------------------------
一、将被储存的对象放在外面,不要和关键对象放在一起,这可以帮助维护内聚。
二、保持关键对象的数据封装。
三、提供了容易实现的恢复能力。
--------------------------------------------
备忘录的用途和缺点:
引用--------------------------------------------
一、备忘录用于储存状态。
二、使用备忘录的缺点:储存和恢复状态的过程可能相当耗时。
三、在Java系统中,可以考虑使用序列化(Serialization)机制储存系统的状态。
--------------------------------------------
原型(Prototype)模式:当创建给定类的实例很昂贵或很复杂时,就使用原型模式。
*原型模式允许你通过复制现有的实例来复制新的实例(在java中,这通常意味着使用clone()方法,或反序列化)。这个模式的重点在于,客户代码在不知道实例化何种特定类的情况下,可以创建出新的实例。
原型的优点:
引用--------------------------------------------
一、向客户隐藏制造新实例的复杂性。
二、提供让客户能够产生未知类型对象的选项。
三、在某些环境下,复制对象比创建新对象更有效。
--------------------------------------------
原型的用途和缺点:
引用--------------------------------------------
一、在一个复杂的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型。
二、使用原型模式的缺点:对象的复制有时相当复杂。
--------------------------------------------
访问者(Visitor)模式:当你想为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。
访问者的优点:
引用--------------------------------------------
一、允许你对组合结构加入新的操作,而无需改变结构本身。
二、想要加入新的操作,相对容易。
三、访问者所进行的操作,其代码是集中在一起的。
--------------------------------------------
访问者的用途和缺点:
引用--------------------------------------------
一、当采用访问者模式的时候,就会打破组合类的封装。
二、因为游走的功能牵扯其中,所有对组合结构的改变就更加困难。
--------------------------------------------
2、索引部分
略。