江苏军民融合网站建设,海南信息港官网,苏州学校网站建设,深圳办公室装修价格表《设计模式》适配器模式
适配器#xff08;Adapter#xff09;是一种结构型设计模式#xff0c;它允许我们将一个类的接口转换成另一个类的接口#xff0c;从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况#xff1a;
在已有的类中添…《设计模式》适配器模式
适配器Adapter是一种结构型设计模式它允许我们将一个类的接口转换成另一个类的接口从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况
在已有的类中添加一些新的行为或者功能但是又不能改变其原有的接口。在这种情况下我们可以创建一个适配器将新的功能转换成已有类所能接受的接口。当需要将一个现有的类集成到另一个类库中时由于接口不同无法直接集成。这时候可以创建一个适配器类将现有类的接口转换成另一个类库的接口。
适配器模式的优点包括
提高代码的复用性适配器模式可以让不兼容的类一起工作从而提高代码的复用性。提高代码的灵活性适配器模式可以让我们很容易地扩展现有的代码添加新的功能。降低代码的依赖性适配器模式可以让我们减少对现有代码的依赖从而提高代码的可维护性。
在本例中我们将实现一个适配器将一个现有的类的接口转换成目标类的接口。
假设我们有一个名为 Adaptee 的类它有一个名为 SpecificRequest() 的方法
class Adaptee
{
public:void SpecificRequest() { std::cout SpecificRequest called. std::endl; }
};现在我们需要将 Adaptee 类的接口转换成目标类的接口该目标类需要具有一个名为 Request() 的方法。我们可以使用适配器模式来实现这一点。首先我们定义一个目标类
class Target
{
public:virtual void Request() 0;
};然后我们定义一个适配器类该类继承自目标类并包含一个指向 Adaptee 对象的指针
class Adapter : public Target
{
private:Adaptee* m_adaptee;public:Adapter(Adaptee* adaptee) : m_adaptee(adaptee) {}virtual void Request() override{std::cout Adapter called. std::endl;m_adaptee-SpecificRequest();}
};在上面的代码中适配器类实现了目标类的接口即 Request() 方法并在该方法中调用了 Adaptee 对象的 SpecificRequest() 方法。
最后我们可以使用以下代码测试适配器模式
int main()
{Adaptee adaptee;Target* target new Adapter(adaptee);target-Request();delete target;return 0;
}在上面的代码中我们首先创建了一个 Adaptee 对象并使用该对象创建了一个适配器对象。然后我们使用适配器对象调用 Request() 方法该方法实际上会调用 Adaptee 对象的 SpecificRequest() 方法。
C STL stack queue
C STL 中的stack和queue内部都使用了deque也就是说deque是stack和queue内部的Adaptee对象不过并不像上方一样使用指针而是组合了对象对deque的接口转为了另外一种接口。