zoukankan      html  css  js  c++  java
  • 设计模式(九)——适配器模式

    将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

    Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
    Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适
               配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
    Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使
               用的业务方法,在某些情况下可能没有适配者类的源代码

    适应场景
    (1) 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。
    (2) 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作

    #include <iostream>
    
    using namespace std;
    
    class V5
    {
    public:
        virtual void use_V5() = 0;
    };
    
    class V220
    {
    public:
        void use_V220()
        {
            cout << "使用220V" << endl;
        }
    };
    
    
    class Adapter:public V5
    {
    public:
        Adapter(V220* v220)
        {
            if (v220 != NULL) {
                m_v220 = v220;
            }
        }
        ~Adapter()
        {
            if (m_v220 != NULL)
                delete m_v220;
        }
        virtual void use_V5()
        {
            m_v220->use_V220();
        }
    private:
        V220* m_v220;
    };
    
    class Iphone
    {
    public:
        Iphone(V5* v5)
        {
            if ( v5 != NULL )
            this->m_v5 = v5;
        }
        ~Iphone()
        {
            if (m_v5 != NULL) {
                delete m_v5;
            }
        }
        void charge()
        {
            m_v5->use_V5();
        }
    private:
        V5 * m_v5;
    };
    
    int main()
    {
        Iphone* my_phone = new Iphone(new Adapter(new V220));
        my_phone->charge();
    
        delete my_phone;
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10367464.html
Copyright © 2011-2022 走看看