美文网首页
外观模式

外观模式

作者: 小蜗牛Snail丶 | 来源:发表于2018-05-02 15:02 被阅读0次

    外观模式 :

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

    主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

    何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

    如何解决:客户端不与系统耦合,外观类与系统耦合。

    关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

    应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

    优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

    缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

    注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

    子系统类 :

    .h:

    /*

    * SubSystemOne.h

    *

    *  Created on: 2018年5月2日

    *      Author: jiangshang

    */

    #ifndef SUBSYSTEMONE_H_

    #define SUBSYSTEMONE_H_

    class SubSystemOne

    {

    public:

    void MethodOne();

    };

    #endif /* SUBSYSTEMONE_H_ */

    .cpp:

    #include#include "SubSystemOne.h"

    using namespace std;

    void SubSystemOne::MethodOne()

    {

    cout<<"子系统方法一"<,endl;

    }

    .h:

    #ifndef SUBSYSTEMTWO_H_

    #define SUBSYSTEMTWO_H_

    class SubSystemTwo

    {

    public:

    void MethodTwo();

    };

    #endif /* SUBSYSTEMTWO_H_ */

    .cpp:

    /* * SubSystemTwo.cpp * * Created on: 2018年5月2日 * Author: jiangshang */#include#include "SubSystemTwo.h"

    using namespace std;

    void SubSystemTwo::MethodTwo()

    {

    cout<<"子系统方法二"<<endl;

    }

    .h:

    #ifndef SUBSYSTEMTHREE_H_

    #define SUBSYSTEMTHREE_H_

    class SubSystemThree

    {

    public:

    void MethodThree();

    };

    #endif /* SUBSYSTEMTHREE_H_ */

    .cpp:

    #include#include "SubSystemThree.h"

    using namespace std;

    void SubSystemThree::MethodThree()

    {

    cout<<"子系统方法三"<<endl;

    }

    .h:

    #ifndef SUBSYSTEMFOUR_H_

    #define SUBSYSTEMFOUR_H_

    class SubSystemFour

    {

    public:

    void MethodFour();

    };

    #endif /* SUBSYSTEMFOUR_H_ */

    .cpp:

    #include#include "SubSystemFour.h"

    using namespace std;

    void SubSystemFour::MethodFour()

    {

    cout<<"子系统方法四"<<endl;
    }

    外观类:

    .h:

    #include "SubSystemOne.h"

    #include "SubSystemTwo.h"

    #include "SubSystemThree.h"

    #include "SubSystemFour.h"

    #ifndef FACEDE_H_

    #define FACEDE_H_

    class Facade{

    public:

    SubSystemOne *one;

    SubSystemTwo *two;

    SubSystemThree *three;

    SubSystemFour *four;

    public:

    Facade();

    ~Facade();

    void MethodA();

    void MethodB();

    };

    #endif /* FACEDE_H_ *

    .cpp:

    #include "Facede.h"

    Facade::Facade()

    {

    one = new SubSystemOne();

    two = new SubSystemTwo();

    three = new SubSystemThree();

    four = new SubSystemFour();

    }

    void Facade::MethodA()

    {

    one->MethodOne();

    two->MethodTwo();

    three->MethodThree();

    }

    void Facade::MethodB()

    {

    two->MethodTwo();

    three->MethodThree();

    }

    外观模式充分的体现了依赖倒转原则和迪米特法则

    感觉电脑的例子更形象:

    电脑整机是CUP、内存、硬盘的外观。有了外观以后,启动电脑和关闭电脑都简化了。

    启动电脑(按一下电源键):启动CPU、启动内存、启动硬盘

    关闭电脑(按一下电源键):关闭硬盘、关闭内存、关闭CPU

    相关文章

      网友评论

          本文标题:外观模式

          本文链接:https://www.haomeiwen.com/subject/vbgqrftx.html