Active Object
什么是Active Object
Active Object模式是一种异步编程模式。它通过对方法的调用(Method Invocation)与方法的执行(Method Execution)进行解耦(Decoupling)来提高并发性。若以任务的概念来说,Active Object模式的核心则是它允许任务的提交(相当于对异步方法的调用)和任务的执行(相当于异步方法的真正执行)分离。
具体这里讲的很详细了,我就不重复了,可以参考。《JAVA多线程编程实战指南》之Active Object(主动对象)模式 http://ifeve.com/java-active-object/
Abstract Server
在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西。这立即满足了DIP和OCP。
顺便说一下,请注意接口的名字是从它的客户的角度起的。它称为Switchable而不是Lightable。接口属于它的客户,而不是它的派生类。客户和接口之间的逻辑关系要强于接口和它的派生类之间的逻辑绑定关系。它们之间的关系强到在没有Switchable的情况下就无法使用Switch;但是,再没有Light的情况下完全可以使用Switchable。逻辑关系的强度和实体关系的强度是不一致的。继承是一个比关联强得多的实体关系。
这种逻辑和实体关系强度的不一致性是静态类型语言的产物。动态类型语言不具有这种不一致性,因为它们不用继承的实现多态行为。
Acyclie Visitor
意图
允许将新的函数功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会创建GOF VISITOR模式所固有的麻烦的依赖循环。
适用性
何时可以使用此模式:
- 当您需要向现有层次结构添加新的函数功能时,无需更改或影响该层次结构。
- 当存在对层次结构进行操作但不属于层次结构本身的函数功能时。例如ConfigureForDOS / ConfigureForUnix / ConfigureForX问题。
- 当您需要根据对象的类型对对象执行非常不同的操作时。
- 当访问类层次结构经常被Element类的新派生进行扩展时。
- 当重新编译,重新链接,重新测试或重新分配Element的新派生时非常昂贵。
后果
好处:
- 类层次结构之间没有依赖循环。
- 如果添加新访问者,则无需重新编译所有访问者。
- 如果类层次结构具有新成员,则不会导致现有访问者中的编译失败。
坏处:
- 违反了最小惊异原则或利斯科夫的替代原则,表明它可以接受所有访客,但实际上只对特定访客感兴趣。
- 必须为可访问的类层次结构中的所有成员创建访问者的并行层次结构。
Extension Object
意图
预期对象的接口将在未来被扩展。通过额外的接口来定义扩展对象。
Anticipate that an object’s interface needs to be extended in the future.
Additional interfaces are defined by extension objects..
结构
参与者
Subject
-
定义抽象主体对象。其定义用于查询是否包含特定扩展的接口。
Extension
-
所有扩展类的抽象基类。可以定义负责管理扩展自身的操作。
-
Extension 知道其是谁的扩展。
ConcreteSubject
-
具体的主体类。实现基类定义的 GetExtension 方法并返回相应的扩展对象。
AbstractExtension
-
特定种类的扩展类的抽象基类。
ConcreteExtension
-
继承并实现 AbstractionExtension 类。实现特定的扩展功能。
适用性
当以下情况成立时可以使用 Extension Object 模式:
-
当需要为已有对象额外添加全新的或无法预见的接口时。
-
抽象的主要接口在不同的客户类中拥有不同的角色时。
-
无法通过子类型化来扩展接口行为时。
效果
-
扩展对象促进了增加新扩展功能。
-
类的主要抽象接口不会过于膨胀。
-
接口的主要抽象在不同的子系统中可实现不同的角色。
-
客户类变得更加复杂。
-
需要控制对扩展对象的滥用。
MonoState
强制执行类似于在所有实例之间共享相同状态的行为。
适用场景
- 必须在类的所有实例间共享相同的状态。
- 通常,这种模式可以在任何可能使用Singleton的地方使用。但是Singleton的使用并不透明,而Monostate则是透明的。
- Monostate比Singleton有一个主要优势。子类可以根据需要修饰共享状态,因此可以提供与基类不同的动态行为。
典型用例
- 日志类
- 管理与数据库的连接
- 文件管理器
Strirway To Heaven
Proxy的变形,这个模式只能在支持多重继承的语言中使用。
TaskMaster
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!