编程语言
首页 > 编程语言> > 外观模式(c++实现)

外观模式(c++实现)

作者:互联网

外观模式

目录

模式定义

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

模式动机

UML类图

外观模式

源码实现

#ifndef HERO_H
#define HERO_H
#include <QDebug>

class Hero
{
public:
    Hero(QString name):m_Name(name){}
    ~Hero(){}

    inline void ZhongDan() { qDebug() << m_Name << " 中单";}
    inline void DaYe() { qDebug() << m_Name << " 打野";}
    inline void FuZhu() { qDebug() << m_Name << " 辅助";}
    inline void FaYu() { qDebug() << m_Name << " 发育";}
    inline void KangYa() { qDebug() << m_Name << " 抗压";}
protected:
    QString m_Name;
};

class ZhenJi : public Hero
{
public:
    ZhenJi():Hero("甄姬"){}
    ~ZhenJi(){}
};

class ZhaoYun : public Hero
{
public:
    ZhaoYun():Hero("赵云"){}
    ~ZhaoYun(){}
};

class XiangXiang : public Hero
{
public:
    XiangXiang():Hero("大小姐"){}
    ~XiangXiang(){}
};

class LianPo : public Hero
{
public:
    LianPo():Hero("廉颇"){}
    ~LianPo(){}
};

class LvBu : public Hero
{
public:
    LvBu():Hero("吕布"){}
    ~LvBu(){}
};

#endif // HERO_H

#ifndef FACADE_H
#define FACADE_H
/************************************
    * @brief	: 用外观模式封装几个不同的子系统,
    * 子系统的操作统一放到外观模式的方法去
    * 峡谷系统安排:
    * 外观类:游戏不同的阵容组合
    * 英雄类:不同的英雄,可以打不同的位置
    * 外观类组合不同的英雄,得到一个胜率值
    * @author	:   wzx
    * @date	:   2020-04-17
    * @project	:  Facade
*************************************/
#include "hero.h"

class Facade
{
public:
    Facade();
    ~Facade();
    double LineUpA();
    double LineUpB();
    double LineUpC();

private:
    XiangXiang* m_XX;
    ZhaoYun*    m_ZY;
    LvBu*   m_LB;
    LianPo* m_LP;
    ZhenJi* m_ZJ;
};

#endif // FACADE_H

#include "facade.h"
#define DELEOBJECT(x) if(x == nullptr) { delete x; x = nullptr;}
Facade::Facade()
{
    m_XX = new XiangXiang();
    m_ZY = new ZhaoYun();
    m_LB = new LvBu();
    m_LP = new LianPo();
    m_ZJ = new ZhenJi();
}

Facade::~Facade()
{
    DELEOBJECT(m_XX);
    DELEOBJECT(m_ZY);
    DELEOBJECT(m_LB);
    DELEOBJECT(m_LP);
    DELEOBJECT(m_ZJ);
}

double Facade::LineUpA()
{
    m_XX->FaYu();
    m_ZY->DaYe();
    m_LB->KangYa();
    m_LP->FuZhu();
    m_ZJ->ZhongDan();
    return 0.88;
}

double Facade::LineUpB()
{
    m_XX->FaYu();
    m_ZY->KangYa();
    m_LB->DaYe();
    m_LP->FuZhu();
    m_ZJ->ZhongDan();
    return 0.40;
}

double Facade::LineUpC()
{
    m_XX->FaYu();
    m_ZY->DaYe();
    m_LB->ZhongDan();
    m_LP->KangYa();
    m_ZJ->FuZhu();
    return 0.60;
}

#include <QCoreApplication>
#include "facade.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Facade facade;
    qDebug() << "胜率" << facade.LineUpA()*100 << "%" << endl;
    qDebug() << "胜率" << facade.LineUpB()*100 << "%" << endl;
    qDebug() << "胜率" << facade.LineUpB()*100 << "%" << endl;
    return a.exec();
}

"大小姐" 发育

"赵云" 打野

"吕布" 抗压

"廉颇" 辅助

"甄姬" 中单

胜率 88 %

"大小姐" 发育

"赵云" 抗压

"吕布" 打野

"廉颇" 辅助

"甄姬" 中单

胜率 40 %

"大小姐" 发育

"赵云" 抗压

"吕布" 打野

"廉颇" 辅助

"甄姬" 中单

胜率 40 %

优点

外观模式的优点

缺点

外观模式的缺点

标签:外观,DELEOBJECT,模式,c++,Facade,子系统,ZY
来源: https://www.cnblogs.com/wzxNote/p/12718427.html