适用场景

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

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

两种实现方式

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

  • 类模式:通过继承的方式来复用 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;
}