Version: Next

结构型模式

系统都有一定的结构,软件系统的结构设计往往设计如下问题

  1. 结构优化问题:庞大的软件系统在结构上必然具有层次性,而优化的结构设计能满足这种层次设计的要求,相关的模式有组成模式;如果软件系统在结构设计时出现数量急剧增长的情况,需要对设计进行重新考量以优化系统结构,相关的模式有装饰模式和享元模式
  2. 结构如何适应外界变化要求的问题:软件功能的实现和使用是不可分割的两个方面,这两个方面也是引起软件变化的重要因素。如软件需要在不同的平台上移植,软件的结构实现不许进行调整优化。用户需求的变化将会导致软件功能使用上的变化,这种变化也需要软件结构进行相应调整。实际上,这两种变化往往交织在一起,从而使类数量在系统演变中不断激增,如何处理这方面的问题需要参考桥接模式
  3. 结构如何满足特殊功能需求的问题:两个现有的不同类型结构(异构)的软件系统彼此如何协作来完成某种功能,相关设计需要参考适配器模式;客户端对一个拥有复杂共呢个的子系统的调用往往存在不方便使用的问题,处理这方面问题可以参考外观模式;在一些情况下,客户端需要通过代理来访问对象,这方面的结构如何设计需要参考代理模式

结构型模式通过运用开闭原则来实现系统结构的稳定和扩展的协调统一,通过运用组合、聚合原则来获得更大更优的系统结构,通过运用强内聚弱耦合原则来处理不同层次结构间的耦合关系

适配器模式 Adapter

定义:将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

源发问题

已经编写完成的系统需要同其他系统进行协作,替换现有系统的部分功能,但现有系统被替换功能的使用端代码不能更换,需要协作的系统调用接口也不能更换,从而造成协作困难

解决方案

  1. 类适配器解决方案,ClientTarget是现有系统范围,而Adaptee是需要写作的外部系统,Target代表了现有系统被替换的部分,而Client使用接口Request已经无法修改,但又希望调用Adaptee的接口SpecificRequest。解决方法是采用多继承让Adapter分别继承TargetAdaptee,从而在AdapterRequest中调用SpecificRequest实现功能适配,由于Java没有多继承,此时使用对象适配器方式
  2. 对象适配器方式,即Adapter只继承Target并掌握Adaptee对象的引用,在AdapterRequest方法中通过Adaptee引用发SpecificRequest消息

UML类图

image-20200331211822392

代码

优缺点

  • 优点 使两个异构系统能够彼此调用;对象适配器比类适配器更灵活
  • 缺点 类适配器对具有单一继承特点的语言Java不适用