从零开始最简单Qt/C++设计模式总结三:适配器模式(类适配器和对象适配器)

代码

基于Qt5.9+mingw32

#include <QCoreApplication>
#include <QList>
#include <QDebug>
///NOTE:3适配器模式的例子--20180910
///适配器的功能就是将本来没有某项功能的类加上其它类的功能
///类适配器模式将两个类共同继承,使没有某功能的类可以用其它类的功能
///对象适配器模式将没有某项功能的类派生出新类,直接加入其它类对象的功能
/// 还有一种适配器,直接写一个适配器类来修改不同适配对象,需要加新功能的类只要选择不同的适配器就行了

//构造一个棍子类,想要拥有射击功能但是并没有
class Stick
{
public:
    virtual ~Stick() {}
    virtual void tryShoot() {}
};

//有一个弓类,可以射击
class Bow
{
public:
    void shoot()
    {
        qDebug() << "I'm shooting!";
    }
};

//构造一个类适配器类,将弓类的射击功能赋予棍子类
class ClassAdapter: public Stick, public Bow
{
public:
    virtual ~ClassAdapter() {}
    void tryShoot()
    {
        this->shoot();
    }
};
//构造一个对象适配器类,将弓类的射击功能赋予棍子类
class ObjectAdapter: public Stick
{
private:
    Bow *bow;
public:
    virtual ~ObjectAdapter()
    {
        delete bow;
    }
    ObjectAdapter()
    {
        bow = new Bow();
    }
    void tryShoot()
    {
        bow->shoot();
    }
};

int main(int, char **)
{
    ///类适配器模式测试
    Stick *stick = new ClassAdapter();
    stick->tryShoot();//现在棍子对象也能射击了
    ///对象适配器模式测试
    Stick *stick2 = new ObjectAdapter();
    stick2->tryShoot();//现在棍子对象也能射击了
    getchar();
    delete stick;
    delete stick2;
}

结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/sssaaaannnddd/article/details/82595518