• 适配器模式(adapter)C++实现


    意图:将一个类的接口转换成客户希望的另一个接口。

    适用性:1.你想使用一个已存在的类,而它的接口不符合你的需求。

        2.你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类协同工作。

        

    类适配器结构:

    类适配器效果:1.仅仅引入一个对象,并不需要额外的指针以间接得到adaptee。

           2.当我们想要匹配一个类以及它所有的子类时,类适配器将无法完成。

           3.使得Adapter可以重新定义Adaptee的部分行为。

    类适配器代码:

    
    

    #ifndef _ADAPTER_
    #define _ADAPTER_
    #include <iostream>
    using namespace std;

    
    

    class Target{
    public:
    Target(){}
    virtual void JulySeven()
    {
    cout<<"中国人过情人节 ";
    }

    };
    class Adaptee{
    public:
    Adaptee(){}
    virtual void March14th()
    {
    cout<<"美国人过情人节 ";
    }
    };

    
    

    class AdapterClass: public Target, public Adaptee{
    public:
    AdapterClass(){}

    
    

    public:
    virtual void JulySeven()
    {
    March14th();
    }
    };

    
    
    

    #endif

     

    中国在七月七日过情人节,美国在三月十四过情人节。

    现在要实现七月七日美国人过情人节:

    #include <iostream>
    #include "Adapter.h"
    using namespace std;

    int main()
    {
    Target* target = new Target;
    cout<<"7月7日";
    target->JulySeven();

    //类适配器
    target = new AdapterClass;
    cout<<"7月7日";
    target->JulySeven();

    //对象适配器
    target = new AdapterObject;
    cout<<"7月7日";
    target->JulySeven();

    return 0;
    }

    对象适配器结构:

    对象适配器效果:

    1.允许能完成与Adaptee以及它所有子类一起工作。

    2.使得重新定义Adaptee的行为比较困难。

    用对象适配器方法就将Festival代码改成如下:

    class AdapterObject: public Target{
    public:
    AdapterObject()
    {
    pFestival = Adaptee();
    }

    virtual void JulySeven()
    {
    pFestival.March14th();
    }

    private:
    Adaptee pFestival;
    };

  • 相关阅读:
    [ZJOI2019]开关
    ABC245 Ex Product Modulo 2
    [SDOI2017]天才黑客
    ABC240G Teleporting Takahashi
    ABC240 Ex Sequence of Substrings
    ABC241H Card Deck Score
    mysql报错1055 only_full_group_by解决办法
    docker删除镜像Error response from daemon: conflict: unable to remove repository reference
    Docker服务启动报错:Job for docker.service failed because the control process exited with error
    bash: ifconfig: 未找到命令 解决方案
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/4173596.html
Copyright © 2020-2023  润新知