博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
13.外观模式--Facade
阅读量:2394 次
发布时间:2019-05-10

本文共 1963 字,大约阅读时间需要 6 分钟。

原文地址:

Facade模式:

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

Facade模式在什么时候使用最好呢?

这要分三个阶段来说,首先,在设计初期阶段,应该要有意识的将不同的层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本来是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加Facade可以提供一个简单的接口,减少它们之间的依赖。第三,在维护一个一流的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须要依赖于它。此时用Facade也是非常适合的。可以为新系统开发一个Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

Facade模式典型的结构图为:

 

以投资股票为例,股民需要了解想购买的所有股票,那么众多的投资者和众多的个股联系太多,即要了解相关个股,又不够专业,而如果投资基金的话,具体是买股票还是债券还是外汇等就不需要关心了,基金经理给你打理好了一切,只需关注基金的盈亏就行了。而这个基金就是Façade。因此,股民买个股可以设计为:一个“股票”基类,然后是继承“股票”的“个股A”,“个股B”,“个股n”,股民需要操作每只股票的接口“买”和“卖”。而股民买个股的设计就变为了:股民直接操作“基金”类的接口,由“基金”去操作个股的“买”,“卖”,债券的“买”,“卖”,…。

下面是Façade的实现代码:

//Facade.h#ifndef _FACADE_H_#define _FACADE_H_// 股票1class Stock1{public:    Stock1();    ~Stock1();    void Operation();protected:private:};// 股票2class Stock2{public:    Stock2();    ~Stock2();    void Operation();protected:private:};// 国债class NationalDebt{public:    NationalDebt();    ~NationalDebt();    void Operation();protected:private:};// 基金class Fund{public:    Fund();    ~Fund();    void OperationWrapper();protected:private:    Stock1* _stock1;    Stock2* _stock2;    NationalDebt* _subs2;};#endif //~_FACADE_H_//Facade.cpp#include "Facade.h"#include 
using namespace std;Stock1::Stock1(){}Stock1::~Stock1(){}void Stock1::Operation(){ cout<<"Stock1::Operation..买股票1"<
_stock1 = new Stock1(); this->_stock2 = new Stock2(); this->_subs2 = new NationalDebt();}Fund::~Fund(){ delete _stock1; delete _stock2; delete _subs2;}void Fund::OperationWrapper(){ this->_stock1->Operation(); this->_stock2->Operation(); this->_subs2->Operation();}//main.cpp#include "Facade.h"#include
using namespace std;int main(int argc,char* argv[]){ // 基金 Fund* f = new Fund(); // 操作基金 f->OperationWrapper(); return 0;}

你可能感兴趣的文章
windows7配置虚拟AP的脚本
查看>>
北京开放政府信息资源 “大数据”供社会化利用
查看>>
大数据挖掘变革 美赛达软硬云引领车联网商业蓝海
查看>>
停车费上涨需要公开“大数据”
查看>>
DirectFB代码导读
查看>>
Cocos2dx3.2从零开始【四】继续。
查看>>
sphinx教程2__安装、配置和使用
查看>>
Discuz!$_G变量的使用方法
查看>>
《云计算架构技术与实践》序言(李德毅院士)
查看>>
Win10家庭版DOCKER安装(上)
查看>>
Win10家庭版DOCKER安装(下)
查看>>
command 'x86_64-linux-gnu-gcc' failed with exit status 1
查看>>
浅谈前端SPA(单页面应用)
查看>>
Insecure default in Elasticsearch enables remote code execution
查看>>
how to use this bugs unserialize()
查看>>
Grep与web漏洞挖掘
查看>>
正则表达式使用详解
查看>>
引用函数magic_quotes_gpc和magic_quotes_runtime的区别和用法(新手推荐)
查看>>
编写不受魔术引号影响的php应用
查看>>
PHP开发安全设置
查看>>