外观模式

定义

外观模式(Facade Pattern)要求一个子系统的外部与其内部的通信必须通过一个统一多的对象进行。外观模式定义了一个高层次的接口,使得子系统更易于使用。

外观模式通用类图

image

Facade 外观角色,客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去,也就是说该角色没有实际的业务逻辑,只是一个委托类。

Subsystem子系统角色

是一个类的集合。子系统并不知道外观的存在,对于子系统而言,外观仅仅是另外一个客户端而已。

外观模式的优点:

减少系统的相互依赖。

外观模式通过封装子系统,向上层模块提供统一的接口,从而降低的上层模块与子系统的过度耦合。

提高了灵活性。

提高安全性

缺点:

不符合开闭原则,即对修改关闭,对扩展开放,当业务逻辑比较复杂时,要修改外观的功能就必须去修改外观角色的代码。

通用源码

#include <iostream>

using namespace std;
class SubSystemOne
{
private:
    SubSystemOne(){};
    void MethodOne(){
        cout<<"子系统方法一"<<endl;
    }
    friend class Facade;
};
class SubSystemTwo
{
private:
    SubSystemTwo(){};
    void MethodTwo(){
        cout<<"子系统方法二"<<endl;
    }
    friend class Facade;
};
class SubSystemThree
{
private:
    SubSystemThree(){};
    void MethodThree(){
        cout<<"子系统方法三"<<endl;
    }
    friend class Facade;
};
class SubSystemFour
{
private:
    SubSystemFour(){};
    void MethodFour(){
        cout<<"子系统方法四"<<endl;
    }
    friend class Facade;
};

class Facade{
    SubSystemOne one;
    SubSystemTwo two;
    SubSystemThree three;
    SubSystemFour four;

public:
    void MethodA()
    {
        cout<<"方法组A"<<endl;
        one.MethodOne();
        two.MethodTwo();
        four.MethodFour();
    }
    void MethodB()
    {
        cout<<"方法组B"<<endl;
        two.MethodTwo();
        three.MethodThree();
    }
};
int main()
{
    Facade facade;
    facade.MethodA();
    facade.MethodB();
    return 0;
}

运行结果

image

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值