適配器模式(Adapter) 適配器模式有兩種形式:類的適配器模式和對象的適配器模式。 一、類的適配器模式 類圖 描述 類的適配器模式: Target,目標介面,可以是具體的或抽象的類,也可以是介面; Adaptee,需要適配的類; Adapter,適配器類,把源介面轉換成目標介面;Adapter類 ...
適配器模式(Adapter)
適配器模式有兩種形式:類的適配器模式和對象的適配器模式。
一、類的適配器模式
類圖
描述
類的適配器模式:
Target,目標介面,可以是具體的或抽象的類,也可以是介面;
Adaptee,需要適配的類;
Adapter,適配器類,把源介面轉換成目標介面;Adapter類實現了Target介面,並繼承Adaptee,Adapter類的Request方法重新封裝了Adaptee的SpecificRequest方法。
應用場景
在項目A里有一個計算加法的方法double Add(double x, double y);在項目B里也有一個計算加法的方法int AddMethod(int x, int y);現在需要在項目A里使用項目B的求和方法,但是又不能更改項目B的方法,此時就必須有一個能把int AddMethod(int x, int y)轉換成double Add(double x, double y)的適配器。
public interface ICalculation { double Add(double x, double y); } public class Calculation : ICalculation { public double Add(double x, double y) { return x + y; } } public class CalculationAdaptee { public int AddMethod(int x, int y) { return x + y; } } public class CalculationClassAdapter : CalculationAdaptee, ICalculation { public double Add(double x, double y) { int value = base.AddMethod((int)x, (int)y); return (double)value; } }
二、 對象的適配器模式
類圖
描述
對象的適配器模式:
Target,目標介面,可以是具體的或抽象的類,也可以是介面;
Adaptee,需要適配的類;
Adapter,適配器類,把源介面轉換成目標介面;Adapter類實現了Target介面,併在內部包裝一個Adaptee的實例,Adapter類的Request方法重新封裝了Adaptee的SpecificRequest方法。
應用場景
同上。把CalculationClassAdapter類替換為:
public class CalculationObjectAdapter : ICalculation { private CalculationAdaptee calculation; public CalculationObjectAdapter(CalculationAdaptee calculation) { this.calculation = calculation; } public double Add(double x, double y) { int value = this.calculation.AddMethod((int)x, (int)y); return (double)value; } }