适配器模式(C++)

介绍

作用: 作为两个不兼容接口之间的桥梁,属于结构型模式.

何时使用:

  • 系统需要使用现有类,但是该类的接口并不符合系统的要求;
  • 通过接口转换,将一个类插入到另一个类中.

关键方案: 继承或依赖(推荐).

优点:

  • 可以将现有的类转换成系统可以使用类;
  • 提高了类的复用;
  • 增加类的透明度

缺点:

  • 过多地使用适配器,或让系统非常凌乱

UML

image

示例

组合实现适配器:


//双端队列,需适配的对象
class Deque{
public:
    void push_back(int x);
    void push_front(int x);
    void pop_back();
    void pop_front();
};

//接口,向外暴露
class Sequence{
public:
    virtual void push(int x) = 0;
    virtual void pop() = 0;
}

//单端队列
class Queue : public Sequence{
public:
     void push(int x) override {
         deque_.push_back(x);
     }
     void pop() override {
         deque_.pop_front();
     }
private:
    Deque deque_;
};

这个是组合实现的适配器,还可以使用继承,不过因为继承的强依赖性,一般会推荐使用组合来实现 :

//双端队列
class Deque{
public:
    void push_back(int x);
    void push_front(int x);
    void pop_back();
    void pop_front();
};

class Sequence{
public:
    virtual void push(int x) = 0;
    virtual void pop() = 0;
}

//单端队列
class Queue : public Deque, public Sequence {
public:
     void push(int x) override {
         push_back(x);
     }
     void pop() override {
         pop_front();
     }
};

适配器模式/装饰模式/代理模式的区别?

  • 适配器的特点在于兼容: 是将一个类(a)通过某种方式转换成另一个类(b);
  • 装饰器模式特点在于增强: 在一个原有类(a)的基础之上增加了某些新的功能变成另一个类(b);
  • 代理模式的特点在于隔离: 将一个类(a)转换成具体的操作类(b) .
posted @ 2020-06-15 12:00  星星,风,阳光  阅读(292)  评论(0编辑  收藏  举报