Façade模式--门面模式

举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去n个地方办理n个手续(现在大学合并后就更加麻烦,因为可能那n个地方都隔的比较远)。但是实际上我们需要的就是一个最后一道手续的证明而已,对于前面的手续是怎么办的、到什么地方去办理我们都不感兴趣。

实际上在软件系统开发中也经常回会遇到这样的情况,可能你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如A和B、C、D):A中实现了一些接口,B中实现一些接口(或者A代表一个独立模块,B、C、D代表另一些独立模块)。然后你的客户程序员(使用你设计的开发人员)只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的A-D的类的接口,他并不想知道这些接口在哪里实现的。

  这里的客户程序员就是上面生活中想办理手续的郁闷的人!在现实生活中我们可能可以很快想到找一个人代理所有的事情就可以解决你的问题(你只要维护和他的简单的一个接口而已了!),在软件系统设计开发中我们可以通过一个叫做Façade的模式来解决上面的问题。

2.2 模式选择
我们通过Facade模式解决上面的问题,其典型的结构图为:





代码片断1Façade.h

//Facade.h

#ifndef _FACADE_H_

#define _FACADE_H_


class Subsystem1

{

public:

      Subsystem1();

      ~Subsystem1();

      void Operation();


protected:


private:

};


class Subsystem2

{

public:

      Subsystem2();

      ~Subsystem2();

      void Operation();


protected:


private:

};


class Facade

{

public:

      Facade();

      ~Facade();

      void OperationWrapper();


protected:


private:

      Subsystem1* _subs1;

      Subsystem2* _subs2;

};


#endif //~_FACADE_H_

代码片断2Façade.cpp

//Facade.cpp

#include "Facade.h"


#include <iostream>

using namespace std;


Subsystem1::Subsystem1()

{

}


Subsystem1::~Subsystem1()

{

}


void Subsystem1::Operation()

{

      cout<<"Subsystem2 operation.."<<endl;

}


Subsystem2::Subsystem2()

{

}


Subsystem2::~Subsystem2()

{

}


void Subsystem2::Operation()

{

      cout<<"Subsystem2 operation.."<<endl;

}


Facade::Facade()

{

      this->_subs1 = new Subsystem1();

      this->_subs2 = new Subsystem2();

}


Facade::~Facade()

{

      delete _subs1;

      delete _subs2;

}

 

void Facade::OperationWrapper()

{

      this->_subs1->Operation();

 

      this->_subs2->Operation();

}

代码片断3main.cpp

//main.cpp

#include "Facade.h"


#include <iostream>

using namespace std;


int main(int argc,char* argv[])

{

      Facade* f = new Facade();

      f->OperationWrapper();

      
 return 0;

}


Façade模式的想法、思路和实现都非常简单,但是其思想却是非常有意义的。并且Façade设计模式在实际的开发设计中也是应用最广、最多的模式之一。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值