设计模式——(九)外观模式

外观模式(Facade)

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。
背景:大家都不懂股票,去买造成了亏损。但基金可以把钱交给基金经理,由他打理,个人无需知道股票是如何运行的。即加个中间人。专业人做专业事。降低了耦合性。
如下:耦合性太高
在这里插入图片描述
在这里插入图片描述

UML结构图

在这里插入图片描述

C++代码

class SystemA {
public:
    void fun1()
    {
        cout << "系统A的方法1" << endl;
    }
};
class SystemB {
public:
    void fun2()
    {
        cout << "系统B的方法2" << endl;
    }
};
class SystemC {
public:
    void fun3()
    {
        cout << "系统C的方法3" << endl;
    }
};
class Facade {   //外观类,它需要了解所有子系统的方法或属性,并进行不同组合,以备外界调用
public:
    Facade() {
        a = new SystemA;
        b = new SystemB;
        c = new SystemC;
    }
    void zuhe1()
    {
        a->fun1();
        c->fun3();
    }
    void zuhe2()
    {
        c->fun3();
        b->fun2();
    }
private:
    SystemA* a;
    SystemB* b;
    SystemC* c;
};
int main()
{
    //由于facade的作用客户端可以根本不用知道三个系统子类的存在
    Facade* fa = new Facade();
    fa->zuhe1();
    fa->zuhe2();
}

何时使用

1.外观模式完美的体现了依赖倒转原则和迪米特法则。
2.何时使用:首先,设计初期阶段,要有意识将不同的两个层分离。(经典的三层结构,层与层之间建立facade,为复杂的子系统提供简单的接口,降低耦合性)。
其次,开发阶段,子系统往往因为不断地重构演化变得越来越复杂,大多数模式使用地时候也会产生很多小类,本是好事,但给外部调用他们的程序带来了很大的困难,可以提供一个Facade,减少依赖。
最后,维护一个遗留的大型系统,可能系统已经非常难以维护和扩展了,但包含了非常重要的功能,可以为新系统开发一个Facade外观类,来提供设计粗糙或高度复杂的遗留代码比较清晰简单的接口,让新系统与Facade对象交互,facade与旧系统交互。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值