适用场景

适配器模式在实际项目中常见于以下两种情形。

  • 情景一:项目中引入的第三方库接口与本程序既有接口不一致,为了让两者协同工作,需要一个中间层把差异屏蔽掉,这时就可以使用适配器模式。
  • 情景二:某个功能需要由多个互不相关的模块组合而成,通过适配器把它们整合到同一个接口之下,调用方只需面对统一的抽象。

两种实现方式

适配器模式在实现上分为两种类别:类模式和对象模式。

  • 类模式:通过继承的方式来复用 Adaptee。
  • 对象模式:通过组合的方式来复用 Adaptee。

结构示意

C++ 示例代码

下面的示例同时演示了类模式(Adapter)和对象模式(Adapter1)两种实现。Target 是调用方期望的目标接口,Adaptee 是需要被适配的既有类。

class Target
                {
                
                public:
                	virtual void Request()
                	{
                
                	}
                
                
                };
                
                class Adaptee
                {
                public:
                	void SpecificRequest()
                	{
                		cout << __FUNCTION__ << endl;
                
                	}
                };
                
                
                // 类模式
                class Adapter :public Target, public Adaptee
                {
                public:
                	void Request()override
                	{
                		Adaptee::SpecificRequest();
                
                	}
                
                
                };
                
                
                // 对象模式
                class Adapter1 :public Target
                {
                public:
                	void Request()override
                	{
                		adaptee.SpecificRequest();
                
                	}
                private:
                	Adaptee adaptee;
                
                };
                
                
                
                
                
                
                int main(int argc, char *argv[])
                {
                	 
                
                	Target * target = new Adapter1;
                	target->Request();
                
                	system("pause");
                	return 0;
                }