外观模式:
为子系统中的一系列接口提供了一个统一的界面。外观模式定义了一个高层次的接口以使子系统更加easy使用。

Provide a unified interface to a set of interfaces in a subsystem.
Façade defines a higher-level interface that makes the subsystem easier to use.

UML图:

主要包含:

  1. Facade(MortgageApplication):了解每一个子系统负者的功能;将client的请求分发给合适的子系统。
  2. SubSystem classes(Bank,Credit,Loan):实现子系统的功能。处理Facade指定的业务,这个类中没有Facede类的信息。

C++代码实现:

#include <iostream>class SubSystem1
{public:void method1(){std::cout<<"SubSystem1::method1 invoke"<<std::endl;}
};class SubSystem2
{public:void method2(){std::cout<<"SubSystem2::method2 invoke"<<std::endl;}
};class SubSystem3
{public:void method3(){std::cout<<"SubSystem3::method3 invoke"<<std::endl;}
};class Facade
{public:Facade(){subSystem1=new SubSystem1();subSystem2=new SubSystem2();subSystem3=new SubSystem3();}void methodA(){std::cout<<"Facade methodA include:"<<std::endl;subSystem1->method1();subSystem2->method2();}void methodB(){std::cout<<"Facade methodB include:"<<std::endl;subSystem1->method1();subSystem3->method3();}~Facade(){if(subSystem1!=NULL)delete subSystem1;if(subSystem2!=NULL)delete subSystem2;if(subSystem3!=NULL)delete subSystem3;}private:SubSystem1 * subSystem1;SubSystem2 * subSystem2;SubSystem3 * subSystem3;
};int main()
{std::cout<<"外观模式測试"<<std::endl;Facade * facade=new Facade;facade->methodA();facade->methodB();delete facade;return 0;
}

运行结果:

一个详细的样例:

Facade为Morgage,这个类用来推断是否能对客户抵押贷款(依据客户的银行账户,行用卡记录,贷款记录来推断)。

SubSystem包含Bank(即客户的银行账户是否满足要求),Credit(客户的信用卡是否符合要求),Loan(客户的是否存在不良贷款记录)。

C++代码例如以下:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using namespace std;
class Customer
{public:Customer(string str=""):name(str){}string getName() const{return name;}void setName(string str){name=str;}private:string name;};class Bank
{public:bool hasSufficientSavings(Customer c,int amount){std::cout<<"check bank for "<<c.getName()<<std::endl;return true;}
};class Credit
{public:bool hasGoodCredit(Customer c){std::cout<<"check credit for "<<c.getName()<<std::endl;return true;}
};class Loan
{public:bool hasNoBadLoans(Customer c){std::cout<<"check loans for "<<c.getName()<<std::endl;return true;}
};class Mortgage
{public:Mortgage(){bank=new Bank;credit=new Credit;loan=new Loan;}bool isEligible(Customer c, int amount){std::cout<<c.getName()<<" applies for "<<amount<<std::endl;bool eligible=true;if(!bank->hasSufficientSavings(c,amount)){eligible=false;}else if(!credit->hasGoodCredit(c)){eligible=false;}else if(!loan->hasNoBadLoans(c)){eligible=false;}return eligible;}~Mortgage(){if(!bank)delete bank;if(!credit)delete credit;if(!loan)delete loan;}private:Bank * bank;Credit *credit;Loan * loan;
};int main()
{std::cout<<"外观模式详细样例"<<std::endl;Mortgage *mortgage=new Mortgage();Customer c(string("John"));bool eligible =mortgage->isEligible(c,25000);std::cout<<c.getName()<<" has been "<<(eligible?

"approve":"reject")<<std::endl; return 0; }

运行结果:

外观模式是一个对迪米特法则非常好的应用。

迪米特法则:
假设两个类不必直接通信,那么这两个类就不应当发生直接的相互作用。假设当中一个类须要调用还有一个类的某一个方法的话。能够通过第三者转发这个调用。
这也是减少耦合性的思想。

转载于:https://www.cnblogs.com/lcchuguo/p/5241382.html

设计模式之八:外观模式(Facade)相关推荐

  1. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  2. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  3. php facade模,PHP 设计模式之外观模式 Facade

    简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...

  4. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. 【设计模式】—— 外观模式Facade

    前言:[模式总览]----------by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...

  6. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  7. 外观模式(Facade)----设计模式

    外观模式(Facade)----设计模式 文章目录 外观模式(Facade)----设计模式 什么是外观模式呢? 外观模式的基本介绍 制造一个影院管理? 实现代码 总结 什么是外观模式呢? 以我们中常 ...

  8. 设计模式:外观模式(Facade)

    外观模式(Facade)也叫过程模式, 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式通过定义一个一致的接口,用以屏蔽内部子系 ...

  9. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

  10. 设计模式之- 外观模式(Facade Pattern)

    外观模式 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...

最新文章

  1. 95行代码实现最大熵模型训练
  2. 用tableView实现的一种加载数据的布局
  3. Drawable 详解
  4. 几种常用的加密方式简单介绍
  5. CMS GC:CMS 废弃了,该怎么办呢?
  6. ITK读取RGB图像像素值
  7. SpringCloud OpenFeign + Nacos正确打开方式!
  8. CVPR 2020 oral:亮风台提出完全可训练的图匹配方法
  9. mysql 一列数据变为一条_SQL 一列数据整合为一条数据
  10. vsCode配置通过Github同步(Settings Sync)
  11. 深入理解操作系统原理之文件系统
  12. Un*、Id分别突变情况下单闭环直流调速系统仿真
  13. 百度文库复制文字(一个按钮,关闭JS功能即可,浏览器100%有效)2021年
  14. 将CAD图纸中的线型和文字样式合并的方法技巧(二)
  15. html类选择器使用在什么场景,你需掌握的CSS知识都在这了(长文建议收藏,文末有福利)...
  16. JMeter Dummy sampler结果乱码 及 正则表达式提取器乱码的解决
  17. 计算机组成原理课程设计-基本模型机的设计与实现
  18. python爬取微信好友_如何用 Python 爬取自己的微信朋友
  19. teamviewer linux远程开机,Ubuntu远程管理(teamviewer)
  20. R语言ggplot2可视化:使用patchwork包(直接使用加号+)将两个ggplot2可视化结果横向组合、接着再和第三个图像横向组合起来(三幅图各占比例为50%、25%、25%)

热门文章

  1. ZooKeeper源码分析-Jute-第二部分
  2. Zookeeper——序列化与反序列化原理
  3. 学计算机好还是学电子信息类好,电子信息类就业前景好吗 就业方向有哪些
  4. C++程序设计:图像旋转
  5. 【新智元专访】Nervana CEO | 英特尔英伟达AI芯片霸主争夺战重装上阵
  6. 交换高质量友情链接对网站SEO有优化有哪些好处?
  7. 请你谈谈Redis主从复制的理解?
  8. mysql无主键删除重复数据保留一条
  9. solr应用入门实例
  10. 现代软件工程作业8-11(朱翔宇)