美文网首页设计模式C++实现笔记
ADAPTER-适配器(结构型模式)

ADAPTER-适配器(结构型模式)

作者: lixin_karl | 来源:发表于2019-01-20 15:27 被阅读0次

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

    代码实现

    一、对象适配器结构实现(基于组合)
    class Target{//目标接口,client可以直接调用
    public:
        virtual void printName(){
            
        };
    };
    
    class Adaptee{//已经存在的接口,此接口需要适配
    public:
        std::string getName(){
            return std::string("karl");
        }
    };
    
    class Adapter : public  Target{//适配器,对Adaptee接口与Target接口进行适配
    public:
        Adapter(Adaptee *adap){
            adaptee = adap;
        }
       void printName () override {
            std::cout<<adaptee->getName()<<std::endl;
        }
    private:
        Adaptee *adaptee;
    };
    
    int main(){//client,用户只能调用Target相关接口
        Adaptee *a;
        Target *target =new Adapter(a);
        target->printName();
    };
    
    
    二、类适配器结构实现(基于继承)
    class Target{//目标接口,client可以直接调用
    public:
        virtual void printName(){
    
        };
    };
    
    class Adaptee{//已经存在的接口,此接口需要适配
    public:
        std::string getName(){
            return std::string("karl");
        }
    };
    
    class Adapter : public  Target, private Adaptee{//对Adaptee接口与Target接口进行适配,私有继承了Adaptee来实现适配
    public:
       void printName () override {
            std::cout<<this->getName()<<std::endl;
        }
    };
    
    int main(){//client
        Target *target = new Adapter();
        target->printName();
    };
    

    适用性

    • 使用一个已经存在的类(Adaptee),但是它的接口不符合要求。
    • 创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。
    • 使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口。

    效果

      比较多的会使用对象适配器

    参考

    相关文章

      网友评论

        本文标题:ADAPTER-适配器(结构型模式)

        本文链接:https://www.haomeiwen.com/subject/tmuxjqtx.html