设计模式 外观模式

1、subsystemone.h

#ifndef SUBSYSTEMONE_H
#define SUBSYSTEMONE_H

#include<iostream>
using namespace std;

class SubSystemOne //Subsystem,子系统一,内有两个方法
{
public:
    SubSystemOne(){}

    void MethodOne()
    {
        cout<<"use SubSystemOne->MethodOne"<<endl;
    }

    void MethodTwo(){
        cout<<"use SubSystemOne->MethodTwo"<<endl;
    }

};
#endif // SUBSYSTEMONE_H

2、subsystemtwo.h

#ifndef SUBSYSTEMTWO_H
#define SUBSYSTEMTWO_H

#include<iostream>
using namespace std;

class SubSystemTwo //Subsystem,子系统二,内有两个方法
{
public:
    SubSystemTwo(){}

    void MethodOne()
    {
        cout<<"use SubSystemTwo->MethodOne"<<endl;
    }

    void MethodTwo()
    {
        cout<<"sue SubSystemTwo->MethodTwo"<<endl;
    }
};

#endif // SUBSYSTEMTWO_H

3、subsystemthree.h

#ifndef SUBSYSTEMTHREE_H
#define SUBSYSTEMTHREE_H

#include<iostream>
using namespace std;

class SubSystemThree //Subsystem,子系统三,内有两个方法
{
public:
    SubSystemThree(){}

    void MethodOne()
    {
        cout<<"use SubSystemThree->MethodOne"<<endl;
    }

    void MethodTwo()
    {
        cout<<"use SubSystemThree->MethodTwo"<<endl;
    };
};

#endif // SUBSYSTEMTHREE_H

4-1、facade.h

#ifndef FACADE_H
#define FACADE_H

#include "subsystemone.h"
#include "subsystemtwo.h"
#include "subsystemthree.h"

class Facade //Facade类,外观的类
{
public:
    Facade();
    ~Facade();
    void MethodOne(); //更高层的统一接口,用:第一子系统的第一方法,第一子系统的第二方法,第二子系统的第一方法
    void MethodTwo(); //更高层的统一接口,用:第二子系统的第二方法,第三子系统的第一方法,第三子系统的第二方法
private:
    SubSystemOne *subSystemOne;
    SubSystemTwo *subSystemTwo;
    SubSystemThree *subSystemThree;
};

#endif // FACADE_H

4-2、facade.cpp

#include "facade.h"

Facade::Facade()
{
    subSystemOne = new SubSystemOne();
    subSystemTwo = new SubSystemTwo();
    subSystemThree = new SubSystemThree();
}

Facade::~Facade()
{
    delete subSystemOne;
    delete subSystemTwo;
    delete subSystemThree;
}

void Facade::MethodOne() //更高层的统一接口,用:第一子系统的第一方法,第一子系统的第二方法,第二子系统的第一方法
{
    cout<<"Facade MethodOne:"<<endl;
    subSystemOne->MethodOne();
    subSystemOne->MethodTwo();
    subSystemTwo->MethodOne();
}

void Facade::MethodTwo() //更高层的统一接口,用:第二子系统的第二方法,第三子系统的第一方法,第三子系统的第二方法
{
    cout<<"Facade MethodTwo:"<<endl;
    subSystemTwo->MethodTwo();
    subSystemThree->MethodOne();
    subSystemThree->MethodTwo();
}

5、main.cpp
/*
作者:jhluroom弹   QQ:454676244  MSN:jhlu0815@hotmail.com
开发IDE:qt creater
开发环境:QT C++
参考网站:神秘果:http://www.shenmiguo.com/

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

理解:
1.Facade提供一个高层接口,将客户的请求代理给适合的子系统(Subsystem)对象,Facade知道子系统的哪些对象来处理请求。
2.Subsystem是一系列类的集合,处理Facade指派的任务。Subsystem不知道Facade的信息

要点:
1.一个复杂的系统包括若干个子系统,Facade模式为复杂子系统提供一个简单而统一的接口。
  譬如编译系统包括代码扫描、语法分析、代码生成等流程,每一个流程可以成为一个子系统。
  客户编译代码并不想知道具体的细节流程,Facade模式封装一套标准编译流程,就屏蔽了编译的具体流程,简化了客户调用。
2.提高子系统的独立性和可移植性。客户程序与抽象类的实现部分之间存在着很大的依赖性。
  引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3.当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。
  如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通讯,从而简化了它们之间的依赖关系。

应用:
假如有三个子系统,每个子系统有二个方法;客户要做二件事情,每一件事情,可能调用这三个子系统的任一一个组合(可能调用
第一个子系统;同时调用第一个、第二个子系统;同时调用第一个子系统、第二个子系统、第三个子系统;等)。并且,在调用每个
子系统时,可以调用这个子系统中的第一个方法,也可以调用这个子系统的第二个方法,也可以同时调用这个子系统的两个方法。
如下源码所示:

以上文字说明,从网上整理而来,有可能部分与其他同仁相同,请谅解,希望我们能够共同交流,谢谢!
*/

#include <QtCore/QCoreApplication>

#include "facade.h"

int main(int argc, char *argv[])
{
    cout << "=== jhluroom start ========" << endl;

    Facade facadeMethodOne;
    facadeMethodOne.MethodOne();

    cout << endl;

    Facade facadeMethodTwo;
    facadeMethodTwo.MethodTwo();

    cout << "=== jhluroom finish _^_ ===" << endl;
}

运行结果:
=== jhluroom start ========
Facade MethodOne:
use SubSystemOne->MethodOne
use SubSystemOne->MethodTwo
use SubSystemTwo->MethodOne
Facade MethodTwo:
sue SubSystemTwo->MethodTwo
use SubSystemThree->MethodOne
use SubSystemThree->MethodTwo

=== jhluroom finish _^_ ===


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值