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

9 篇文章 2 订阅

代码

基于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, private Bow//私有继承Bow类使得不能通过ClassAdapter直接访问到Bow的shoot函数,要统一使用tryShoot
{
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;
}


##结果
这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值