• 设计模式---适配器模式


    一、定义

    适配器模式:将一个类的借口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

    二、模式结构

    适配器模式包含如下角色:

    • Target:目标抽象类
    • Adapter:适配器类
    • Adaptee:适配者类
    • Client:客户类

    适配器模式有对象适配器和类适配器两种实现:

    对象适配器:

    类适配器:

    三、代码样例

    #include <iostream>
    #include "Adapter.h"
    #include "Adaptee.h"
    #include "Target.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        Adaptee * adaptee  = new Adaptee();
        Target * tar = new Adapter(adaptee);
        tar->request();
        
        return 0;
    }
    ///////////////////////////////////////////////////////////
    //  Adapter.h
    //  Implementation of the Class Adapter
    //  Created on:      03-十月-2014 17:32:00
    //  Original author: colin
    ///////////////////////////////////////////////////////////
    
    #if !defined(EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_)
    #define EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_
    
    #include "Target.h"
    #include "Adaptee.h"
    
    class Adapter : public Target
    {
    
    public:
        Adapter(Adaptee *adaptee);
        virtual ~Adapter();
    
        virtual void request();
    
    private:
        Adaptee* m_pAdaptee;
    
    };
    #endif // !defined(EA_BD766D47_0C69_4131_B7B9_21DF78B1E80D__INCLUDED_)
    ///////////////////////////////////////////////////////////
    //  Adapter.cpp
    //  Implementation of the Class Adapter
    //  Created on:      03-十月-2014 17:32:00
    //  Original author: colin
    ///////////////////////////////////////////////////////////
    
    #include "Adapter.h"
    
    Adapter::Adapter(Adaptee * adaptee){
        m_pAdaptee =  adaptee;
    }
    
    Adapter::~Adapter(){
    
    }
    
    void Adapter::request(){
        m_pAdaptee->specificRequest();
    }
    ///////////////////////////////////////////////////////////
    //  Adaptee.h
    //  Implementation of the Class Adaptee
    //  Created on:      03-十月-2014 17:32:00
    //  Original author: colin
    ///////////////////////////////////////////////////////////
    
    #if !defined(EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_)
    #define EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_
    
    class Adaptee
    {
    
    public:
        Adaptee();
        virtual ~Adaptee();
    
        void specificRequest();
    
    };
    #endif // !defined(EA_826E6B4F_12BE_4609_A0A3_95BD5E657D36__INCLUDED_)

     运行结果:

  • 相关阅读:
    有效解决mysql中ONLY_FULL_GROUP_BY办法1055
    20192320杨坤Python技能树及CSDN MarkDown编辑器测评
    20192320杨坤201920202 《Python程序设计》实验三报告
    博客链接
    个人纪录20220420
    mysql 优化表空间报错Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
    spring——基于XML的AspectJ AOP开发(转载)
    spring——Spring集成AspectJ(转载)
    MyBatis框架——MyBatis是什么(转载)
    spring——Spring AOP(转载)
  • 原文地址:https://www.cnblogs.com/zhanghu52030/p/9598095.html
Copyright © 2020-2023  润新知