ISO C++ 與 C# 版經典物件適配器,結構相同:Adapter 實作 ITarget,持有 Adaptee 指標/參考,request() 轉呼叫 specificRequest()。
class ITarget { public: virtual void request() const = 0; };
class Adaptee { public: void specificRequest() const { cout << "Hello Adaptee!!" << endl; } };
class Adapter : public ITarget {
Adaptee* _adaptee;
public:
Adapter(Adaptee* a = 0) : _adaptee(a) {}
virtual void request() const { if (_adaptee) _adaptee->specificRequest(); }
};
interface ITarget { void request(); }
class Adaptee { public void specificRequest() { Console.WriteLine("Hello Adaptee!!"); } }
class Adapter : ITarget {
protected Adaptee _adaptee = null;
public Adapter() {}
public Adapter(Adaptee a) { _adaptee = a; }
public void request() { if (_adaptee != null) _adaptee.specificRequest(); }
}
兩語言差異在於記憶體管理(C++ 指標 vs C# 參考)與介面語法,核心模式結構完全一致。