《面向模式的软件体系结构1--模式系统》读书笔记(3)--- 设计模式

设计模式

      八种设计模式:整体-部分、主控-从属、代理、命令处理器、视图处理程序、转发器-接收器、客户机-分配器-服务器、出版者-订阅者。

 

设计模式分类:

   1)结构化分解。此类别包含的模式支持将子系统和复杂组件适当地分解为相互合作的部分。整体-部分模式是些类别最常用的模式。

   2)工作的组织。此类别包含的模式定义了组件之间如何协作来共同解决复杂问题。主控-从属模式有助于构成服务所需的容错或计算精度的计算,它同时支持将服务分解成相互独立的部分并能并行执行。

   3)访问控制。这种模式保护与控制对服务或组件的访问,代理模式允许客户机与组件的代表通信而不是与组件本身通信。

   4)管理。此类别包含的模式将同类对象集、同类服务集、同类组件集视为一个整体来处理。命令处理器模式处理用户命令的管理和协议,而视图处理程序模式描述在一个软件系统中如何管理视图。

   5)通信。此类别中的模式有助于构成组件间的通信。转发器-接收器模式处理对等通信,客户机-分配器-服务器模式描述在一个客户机-服务器结构中的位置透明通信。出版者-订阅者模式有助于合作之间保持数据一致性任务。

 

整体-部分模式

   整体-部分模式的一般原则适用于三种关系类型的组织:

      1)组装-部分(assembly - parts)关系,用于区分一个产品与其组成部分或子配件。所有的组成部分根据组装的内部结构紧密地集成在一起。子配件的数量和类型被事先定义,并不能被更改。

      2)容器-内容(container - contents)关系,其中聚合对象表示为一个容器,与组装-部分关系中的部分相比,这些内容较为松散,甚至可以动态地添加或删除内容。

      3)收集-成员(collection - memeber)关系,该收集提供诸如对其成员进行迭代和对成员执行操作的功能。不区分收集的单个成员均被同等对等。

   对外部客户机来讲,只有整体的服务是可见的。整体还充当一个包装器(wrapper),它围绕其组成部分,保护它们免遭未经受权的访问。每个部分对象恰好被嵌入在一个整体中。两个或两个以上的整体不能共享同一个部分。每个部分的创建或销毁在其整体的生命周期内完成。

 

 

   实现

      1)设计整体的公共接口。分析整体必须提供给客户机的功能。在这个步骤中仅仅考虑客户机的观点。把整体看作是没有分解成部分的原子组件。编译共同组成整体的公共接口的方法列表。

      2)整体分解的部分,或者从现存的部分中合成。有两种方法聚集所需要的部分 —— 一种是从现存的部分自下而上聚集成一个整体,另一种方法是将整体自上而下分解为较小部分:

         ·自下而上的方法允许从松散耦合的部分组成整体,在以后实现其他类型的整体时将重用这些部分。

         ·自上而下的方法便覆盖整体的所有功能成为可能,划分为部分是由于受整体为其客户机提供服务的驱动,避免了实现粘贴代码的需求。然而,严格地应用自上而下的方法经常导致部分紧密耦合而不能在其他语境重用。

      3)如果沿用自下而上的方法。使用组件库或类库中现存的部分并详细描述它们之间的协作。如果利用现存的部分不能覆盖整体的所有功能,则需要详细说明附加的部分,以及其与剩余部分的集成。也许需要使用自上而下的方法来实现这些缺少的部分。

      4)如果沿用自上而下的方法。将整体的服务分解为较小的协作服务,并将这些协作服务映射到分离的部分。

      5)用部分的服务来详细说明整体的服务。在前两个步骤所建立的结构中,整体被表示成协作部分的集合,它们分别有独立的职责。

         ·如果客户机的请求被转发给部分服务,部分不需要使用整体执行语境的任何知识,只需依赖它自身环境。

         ·委派方法要求整体将它自己的语境信息传递给部分,当需要把部分紧密嵌入在整体的环境中时,委派十分有用。

      6)实现部分。如果部分自身是整体-部分结构,转到步骤1递归设计。如果不是,从库中重用现存的部分,或者如果它们的实现是直截了当的并且不需要更进一步的分解,就只实现它们。

      7)实现整体。基于在前面步骤中开发的结构实现整体的服务,通过从整体中请求它们的服务来实现依赖于部分对象的服务,还必须在这一步中实现不依赖于部分对象的服务。

 

   优点

      1)部分的可变更性。整体封装部分并因此使其客户机不能见到这些部分。这使修改整体的内部结构而不影响客户机成为可能。部分的实现也将发生彻底改变而不必修改其他部分或客户机。

      2)事务的分离。一个整体-部分结构支持对事务的分离。每个事务由一个分离的部分来实现,因此,通过由较简单的服务组合它们相比将它们当作单块集成单元来实现,会较容易地实现复杂策略。

      3)可重用性。整体-部分模式支持两个方面的重用。首先,整体的部分能够重用于其他聚合对象;其次,在整体中对部分的封装阻止客户机在它的源程序中“分散”部分对象的使用。

 

   不足

      1)间接的行为降低了效率。因为整体在其部分周围建立了一层包装,它也在一个客户机请求和实践它的部分之间引入了一个间接的附加层。

      2)分解为部分较为复杂。由不同的部分合成合适的一个整体通常是很困难的,尤其是采用自底向上方法的时候。

你可能感兴趣的:(设计模式)