外观模式:
为子系统中的一系列接口提供了一个统一的界面。外观模式定义了一个高层次的接口以使子系统更加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. 学习、积累、交流-IC设计高手的成长之路
  2. C++:不同数据类型作为参数传递和作为返回值的例子
  3. android 坐标布局变形,Android:scrollBy实现view随意移动并显示坐标
  4. 更新数据时出错——所有记录中均未找到搜索关键字
  5. 功放前级的左右_TDG Audio达芬奇:什么是前级,后极?
  6. 基于jquery,bootstrap数据验证插件bootstrapValidator
  7. 解读升压电路(BOOST)与降压电路(BUCK)
  8. 联想笔记本prtsc不能截图_Win10系统下怎么截屏
  9. 无痛学习ISAC(二)
  10. orcad如何设置模块化设计_使用OrCAD设计多个相同功能模块电路可以使用层次化设计...
  11. 简述计算机的含义是什么,输入法全拼和双拼是什么意思?有什么区别?
  12. 数组的降维与升维方法
  13. AtCoder Beginner Contest 190 D - Staircase Sequences
  14. 2016天善智能交流会第22场: R语言为量化而生
  15. 【学习】蓝桥杯嵌入式--按键输入
  16. 在项目中使用Liquibase
  17. 线速处理能力的计算方法
  18. 初识Python之刨根问底
  19. cocos2dx《单机斗地主》源码解剖之八 电脑玩家出牌与跟牌(结束)
  20. 有没有人可以帮我解析一下下面的json

热门文章

  1. PCA特征脸python实现
  2. “无人经济”场景日渐丰富,但仍需考虑更多问题!
  3. 【图文并茂】安装虚拟机+lunix centOS
  4. eBPF/Ftrace 双剑合璧:no space left on device 无处遁形
  5. 关于数据结构的学习目标
  6. mac使用pptp的正确方式
  7. 数学归纳法证明Nicomachus's Theorem
  8. php删除数组中指定的元素,php如何删除数组中指定的元素?
  9. 单细胞及空间转录组高分文章解析!ceRNA学习!
  10. 高达坐骑机器人_自带特效的坐骑!新机器人坐骑圆谷迷机师梦!