• 3.适配器模式


    1.适配器模式

      适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容一起工作的哪些类可以一起工作。它包括类适配器和对象适配器。

    (1)对象适配器

      适配器容纳一个它包裹的类的实例,适配器调用被包裹对象的物理实体

      例:STL中的双端队列,支持前后两端插入与删除。STL实现栈和队列时,没有从头开始定义它们,而是直接使用双端队列实现。这里双端队列就扮演了

        适配器角色。队列用到了它的后端插入,前段删除。而栈用到它的后端插入,后端删除。  

    //双端队列
    class Deque {
    public:
        void push_back(int x) { std::cout << "Deque push_back." << std::endl; }
        void push_front(int x) { std::cout << "Deque push_front." << std::endl; }
        void pop_back() { std::cout << "Deque pop_back." << std::endl; }
        void pop_front() { std::cout << "Deque pop_front." << std::endl; }
    };
    
    //顺序容器
    class Sequence {
    public:
        virtual void push(int x) = 0;
        virtual void pop() = 0;
    };
    
    //
    class Stack : public Sequence {
    public:
        void push(int x) { m_deque.push_back(x); }
        void pop() { m_deque.pop_back(); }
    private:
        Deque m_deque; //双端队列
    };
    
    //队列
    class Queue : public Sequence {
    public:
        void push(int x) { m_queue.push_back(x); }
        void pop() { m_queue.pop_front(); }
    private:
        Deque m_queue; //双端队列
    };
    
    int main() {
        Sequence* s1 = new Stack();
        Sequence* s2 = new Queue();
        s1->push(1); 
        s1->pop();
        s2->push(2); 
        s2->pop();
        delete s1;
        delete s2;
        return 0;
    }

    (2)类适配器模式

      适配器继承自己实现的类(一般多重继承)

    class Target {
    public:
        virtual void Request() {}
    };
    
    // "Adaptee"
    class Adaptee {
    public:
        void SpecificRequest() {
            std::cout << "Called SpecificRequest()" << std::endl;
        }
    };
    
    // "Adapter"
    class Adapter : public Adaptee, public Target {
    public:
        void Request() {
            this->SpecificRequest();
        }
    };
    
    int main() {
        Target *t = new Adapter();
        t->Request();
        return 0;
    }
  • 相关阅读:
    以链表为载体学习C++(1)
    以链表为载体学习C++(2)
    20191304商苏赫Python程序设计实验一
    Python实验二 20191304商苏赫
    七大基本排序算法之插入排序
    七大基本排序算法之归并排序
    《富爸爸,穷爸爸》
    七大基本排序算法之冒泡排序
    七大基本排序算法之选择排序
    七大基本排序算法之希尔排序
  • 原文地址:https://www.cnblogs.com/csqtech/p/5866562.html
Copyright © 2020-2023  润新知