zoukankan      html  css  js  c++  java
  • 适配器模式(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;
    };

  • 相关阅读:
    Robocopy进行大量迁移
    以日期为文件名
    office outlook 無法開啟 outlook 視窗
    Dell R420 RAID建立以及系统安装
    CentOS系统如何设置服务开机自动运行
    Win10系统怎样让打开图片方式为照片查看器
    Download Software Top 10
    CentOS 5.11安装配置LAMP服务器(Apache+PHP5+MySQL)
    建模时,什么时候用值对象,什么时候用子表
    缓存穿透、缓存雪崩、缓存击穿的概念和解决方案
  • 原文地址:https://www.cnblogs.com/wrbxdj/p/4173596.html
Copyright © 2011-2022 走看看