设计模式之外观模式

什么是外观模式

外观模式就是将一个复杂的子类系统抽象到同一个接口进行管理
外界只需要通过此接口与子类系统进行交互,不需要直接与复杂的子类系统进行交互

外观模式属于结构型模式

外观模式案例

1、实现KTV模式:打开电视,关灯,音响打开,麦克风打开,dvd打开
2、实现游戏模式:电视打开,音响打开,游戏机打开

// 电视机
class Television
{
public:
    void on(){
        cout << "打开电视" << endl;
    }
    void off(){
        cout << "关闭电视" << endl;
    }
};

// 灯
class Light
{
public:
    void on(){
        cout << "打开灯" << endl;
    }
    void off(){
        cout << "关闭灯" << endl;
    }
};

// 音响
class Audio
{
public:
    void on(){
        cout << "打开音响" << endl;
    }
    void off(){
        cout << "关闭音响" << endl;
    }
};

// 麦克风
class Mircophone
{
public:
    void on(){
        cout << "打开麦克风" << endl;
    }
    void off(){
        cout << "关闭麦克风" << endl;
    }
};

// DVD
class DVDplayer
{
public:
    void on(){
        cout << "打开DVD" << endl;
    }
    void off(){
        cout << "关闭DVD" << endl;
    }
};

// 游戏机
class Gamechine
{
public:
    void on(){
        cout << "打开游戏机" << endl;
    }
    void off(){
        cout << "关闭游戏机" << endl;
    }
};

// 外观一:KTV模式
class KTVMode
{
public:
    KTVMode(){
        pTv = new Television;
        pLight = new Light;
        pAudio = new Audio;
        pMi = new Mircophone;
        pDVD = new DVDplayer;
    }
    ~KTVMode(){
        delete pTv;
        delete pLight;
        delete pAudio;
        delete pMi;
        delete pDVD;
    }
    void OnKtv(){
        pTv->on();
        pLight->on();
        pAudio->on();
        pMi->on();
        pDVD->on();
    }
    void OffKtv(){
         pTv->off();
        pLight->off();
        pAudio->off();
        pMi->off();
        pDVD->off();
    }

public:
    Television * pTv;
    Light * pLight;
    Audio * pAudio;
    Mircophone* pMi;
    DVDplayer* pDVD;
};

// 外观二:游戏机模式
class GameMode
{
    public:
    GameMode(){
        pTv = new Television;
        pAudio = new Audio;
        pGame = new Gamechine;
    }
    ~GameMode(){
        delete pTv;
        delete pAudio;
        delete pGame;
    }
    void OnGame(){
        pTv->on();
        pAudio->on();
        pGame->on();
    }
    void OffGame(){
        pTv->off();
        pAudio->off();
        pGame->off();
    }

public:
    Television * pTv;
    Audio * pAudio;
    Gamechine* pGame;
};

// 外观模式的使用
void test01(){
    KTVMode* sp1 = new KTVMode();
    sp1->OnKtv(); // 打开KTV模式
    sp1->OffKtv(); // 关闭KTV模式
    cout << "------------------------------" << endl;
    GameMode* sp2 = new GameMode();
    sp2->OnGame();  // 打开游戏模式
    sp2->OffGame(); // 关闭游戏模式
    delete sp1;
    delete sp2;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值