链接:C++ 设计模式
链接:C++ 设计模式 - 门面模式
链接:C++ 设计模式 - 代理模式
链接:C++ 设计模式 - 中介者
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端期望的另一个接口,从而使原本由于接口不兼容而无法一起工作的类可以协同工作。
1.问题分析
在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。为了让这些类能够协同工作,我们需要一种方法来“适配”它们的接口。
2.实现步骤
- 定义目标接口(Target Interface):这是客户期望使用的接口。
- 定义现有接口(Adaptee Interface):这是需要适配的现有接口。
- 创建适配器类(Adapter Class):适配器类实现目标接口,并在内部调用现有接口的方法。
3.代码示例
3.1.定义旧接口(Adaptee)
class OldInterface {public:void oldRequest() { std::cout << "Old request" << std::endl; }
};
3.2.定义新接口(Target)
class NewInterface {public:virtual ~NewInterface() = default;virtual void newRequest() = 0;
};
3.3.定义对象适配器(Adapter)
class ObjectAdapter : public NewInterface {public:ObjectAdapter(std::unique_ptr<OldInterface> adaptee) : adaptee_(std::move(adaptee)) {}void newRequest() override { adaptee_->oldRequest(); }private:std::unique_ptr<OldInterface> adaptee_;
};
3.4.客户端代码
int main() {std::unique_ptr<OldInterface> oldInterface = std::make_unique<OldInterface>();std::unique_ptr<NewInterface> adapter = std::make_unique<ObjectAdapter>(std::move(oldInterface));adapter->newRequest(); // 输出 "Old request"return 0;
}
4.总结
适配器模式的核心思想是通过引入一个适配器类,将现有接口转换为目标接口。适配器类实现目标接口,并在内部持有现有接口的实例,通过调用现有接口的方法来实现目标接口的方法。
适配器模式有两种主要形式:
- 类适配器:通过多重继承实现适配器模式,适配器类继承目标接口和现有接口。这种方式在C++中不常用,因为多重继承可能带来复杂性。
- 对象适配器:通过组合实现适配器模式,适配器类持有现有接口的实例。这种方式更为常见,因为它更灵活且符合单一职责原则。