外观模式

把一些复杂的流程封装成一个接口供给外部用户更简单的使用,为子系统统一一套接口,把内部复杂的实现屏蔽,让子系统更加容易使用。

听起来可能会很抽象,别急,小妖怪,让我帮你分析分析。

假如你想把衣服干净需要做什么?泡衣服,洗衣服,排水,甩干,这时你的衣服洗干净了,你开心吗?不你不开心(我说你不开心你就得不开心,哼)。因为我只是想要脏衣服变成干净的衣服而已。

后来,你有了一台洗衣机,它的功能很强大,他可以泡衣服,洗衣服,排水,甩干。你把衣服给他,他会给你洗好的衣服。现在你开心了吗?开心了(嘻嘻)。

对于客户来说,他们可能只希望得到最终结果,并不想知道中间过程怎么样,像是(泡衣服,洗衣服,排水,甩干)这些都是中间过程。我们为这些过程包裹一层外观,于是洗衣机出现了,洗衣机帮我们把这些事都包了,我们只需要拿干净的衣服就可以了。

#include<iostream>
//#include<string>

using namespace std;

//泡衣服
class SoakClothes
{
public:
    SoakClothes() {}
    void Soak()
    {
        cout<<"泡衣服"<<endl;
    }
};

//洗衣服
class WashClothes
{
public:
    WashClothes() {}
    void Wash()
    {
        cout<<"洗衣服"<<endl;
    }
};

//排水
class Drainage
{
public:
    Drainage() {}
    void Drain()
    {
        cout<<"排水"<<endl;
    }
};

//甩干衣服
class DryClothes
{
public:
    DryClothes() {}
    void Dry()
    {
        cout<<"甩干衣服"<<endl;
    }
};

//洗衣机
class Facade
{
public:
    Facade()
    {
        soak  = new SoakClothes();
        wash  = new WashClothes();
        drain = new Drainage();
        dry   = new DryClothes();
    }
    // 给客户提供统一的接口,客户不必关心内部实现
    void washing()
    {
        //洗衣全套一条龙
        soak->Soak();
        wash->Wash();
        drain->Drain();
        dry->Dry();
    }

    void drying()
    {
        //湿衣服甩干
        dry->Dry();
    }

    ~Facade()
    {
        delete soak;
        delete wash;
        delete drain;
        delete dry;
    }

private:
    SoakClothes* soak;
    WashClothes* wash;
    Drainage*    drain;
    DryClothes*  dry;
};

//自己洗
void main_you()
{
    SoakClothes* soak;
    WashClothes* wash;
    Drainage*    drain;
    DryClothes*  dry;

    soak  = new SoakClothes();
    wash  = new WashClothes();
    drain = new Drainage();
    dry   = new DryClothes();

    soak->Soak();
    wash->Wash();
    drain->Drain();
    dry->Dry();

    delete soak;
    delete wash;
    delete drain;
    delete dry;
}

//洗衣机洗
void main_machine()
{
    Facade * machine = new Facade();
    machine->washing();
    delete machine;
}

int main()
{
//    main_you();

    main_machine();

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值