- 結構型模式
- 配接器模式
- 類配接器和物件配接器
結構型模式
結構型模式的重點在于如何通過靈活的體系組織不同的物件,并在此基礎上完成更為復雜的型別(或者型別系統),而參與組合的各型別之間始終保持盡量松散的結構關系,
結構型模式包括以下幾種:
- 配接器模式
- 橋接模式
- 組合模式
- 裝飾模式
- 外觀模式
- 享元模式
- 代理模式
配接器模式
GOF對配接器模式的描述為:
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype..
— Design Patterns : Elements of Reusable Object-Oriented Software
使用配接器模式主要有兩個方面的目的:
- 舊介面在新的環境下不兼容時,借助配接器模式完成從舊介面到新介面的轉換,
- 將“既有系統”進行封裝,邏輯上客戶程式不知道“既有系統”的存在,將變化隔離在Adapter部分,如果客戶程式需要遷移,僅需要在Adapter部分做修改,
類配接器和物件配接器
配接器的實作一般有兩種方式:
- 類配接器,通過繼承讓配接器類具有既有型別的特點,同時也可以根據客戶程式的需要,滿足新介面的需要
- 物件配接器,在配接器里保存一個既有型別的參考,它自身按照客戶程式的要求,實作新介面,
定義ITarget和Adaptee
public interface ITarget
{
void Request();
}
public class Adaptee
{
public void SpecifiedRequest() { }
}
類配接器
public class ObjectAdapter : Adaptee, ITarget
{
public void Request()
{
//其他處理
//...
base.SpecifiedRequest();
//...
}
}
物件配接器
public class ClassAdapter : ITarget
{
private Adaptee adaptee;
public void Request()
{
//其他處理
//...
adaptee.SpecifiedRequest();
//...
}
}
兩者的區別有:
| 類配接器 | 物件配接器 |
|---|---|
| 基于繼承概念 | 基于物件組合的思路 |
| 配接器之前不能繼承自其他類、 Target只能是介面形式的ITarget | Target可能是ITarget(介面), TargetRase(抽象類),甚至是物體類,只要Adapter滿足不繼承兩個或兩個以上類的限制即可 |
| 可以覆寫 Adaptee的某些方法 | 無法覆寫 Adaptee的方法 |
| 雖然不可以適配子類,但可以通過覆寫修改某些方法,部分情況下可以達到配子類同樣的效果 | 不僅可以適配 Adaptee,還可以適配 Adaptee的任何子類 |
類配接器和物件配接器最大的區別在于對既有型別的使用上,在擴展新功能的時候,前者使用了繼承,后者使用組合的方式,物件配接器相對而言是被推薦的方式,因為使用組合帶來的耦合往往比繼承更松散,
物件配接器的UML類圖為:

所以配接器模式主要包括三個角色:
- Target(ITarget):呼叫端所期待的介面;
- Adaptee:需要被適配的型別;
- Adapter:配接器,完成從Adaptee到Target的轉換,
配接器模式是一種相對簡單,而且使用廣泛的模式,在需要實作介面間的兼容、隔離變化的時候,是一種很好的選擇,
參考書籍:
王翔著 《設計模式——基于C#的工程化實作及擴展》
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/4547.html
標籤:設計模式
上一篇:設計模式概述
下一篇:工廠模式
