北风设计模式课程---外观模式(Facade)总结

一、总结

一句话总结:

不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例
设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生产出来装备,然后给宗门武器库,宗门武器库发给我,如果是打怪获得的装备,可以是装备工厂把装备给的怪物装备库

1、外观模式如何实现:张三自从毕业后开始做软件开发,做着做着发现不爽了,钱赚不了太多,头发也白了。于是拿着一点小资本,想着做点小生意。瞅着眼前的餐饮行业还不错,于是打算开一家餐馆。开参观可不是一件容易的事,仅仅行政类的审批流程就不少。至少包括办理卫生许可证,办理税务登记,办理工商登记等。?

把 办理卫生许可证,办理税务登记,办理工商登记 交给中介来办

2、外观模式的实质?

中介模式:把复杂的东西交给中介去办,我们只管收最后的成品:封装交互,简化调用

3、外观模式的目的是什么?

不是给予子系统添加新的功能接口
而是为了让外部减少与子系统内多个模块的交互,松散耦合,从而让外部

二、设计模式总结篇系列:外观模式(Facade)

转自或参考:设计模式总结篇系列:外观模式(Facade)
https://www.cnblogs.com/lwbqqyumidi/p/3754251.html

张三自从毕业后开始做软件开发,做着做着发现不爽了,钱赚不了太多,头发也白了。于是拿着一点小资本,想着做点小生意。瞅着眼前的餐饮行业还不错,于是打算开一家餐馆。开参观可不是一件容易的事,仅仅行政类的审批流程就不少。至少包括办理卫生许可证,办理税务登记,办理工商登记等。

我们先来看一下行政审批接口:

 interface Executive{

     public void approve();

 }

卫生局类的定义:

 class HealthOffice implements Executive{

     @Override
public void approve() {
System.out.println("卫生局通过审批");
} }

税务局类的定义:

 class RevenueOffice implements Executive{

     @Override
public void approve() {
System.out.println("税务局完成登记,定时回去收税");
} }

工商局类的定义:

 class SaicOffice implements Executive{

     @Override
public void approve() {
System.out.println("工商局完成审核,办法营业执照");
} }

好了,现在客户端需要上场了:

 public class FacadeTest {

     public static void main(String[] args) {
System.out.println("开始办理行政手续..."); HealthOffice ho = new HealthOffice();
RevenueOffice ro = new RevenueOffice();
SaicOffice so = new SaicOffice(); ho.approve();
ro.approve();
so.approve(); System.out.println("行政手续终于办完了");
} }

当然,上面的各个方法不一定都是实现同一个接口的,只是在这个例子中巧合了下。

我们发现,对客户端而言,想要的最终目的和关心的是办理完开饭店的行政审批手续,如果以办理行政手续为一个子系统来看的话,我们发现,上面的设计中客户端直接与子系统内的多个模块进行了交互,对客户端而言,比较麻烦,使得客户端不能简单的使用系统功能,且随着子系统模块的变换客户端可能也需要随着变化。

我们可以通过外观模式来解决上述问题,外观模式的一般描述是:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一子系统更加容易被外部使用。

利用外观模式对上述类进行重定义。定义一个外观类:

 class ApproveFacade {

     public ApproveFacade() {

     }

     public void wholeApprove() {
new HealthOffice().approve();
new RevenueOffice().approve();
new SaicOffice().approve();
} }

客户端调用:

 public class FacadeTest {

     public static void main(String[] args) {
System.out.println("开始办理行政手续..."); ApproveFacade af = new ApproveFacade();
af.wholeApprove(); System.out.println("行政手续终于办完了");
} }

看,通过外观模式后客户端调用够简单了吧。

外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单地使用子系统。

外观模式的本质是:封装交互,简化调用。

 

北风设计模式课程---外观模式(Facade)总结的更多相关文章

  1. 北风设计模式课程---访问者模式(Visitor)

    北风设计模式课程---访问者模式(Visitor) 一.总结 一句话总结: 设计模式是日常问题的经验总结方案,所以学好设计模式对日常出现的问题可以有很好的解决. 访问者设计模式有点神似 抽象工厂模式, ...

  2. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  3. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

  4. 北风设计模式课程---状态模式State(对象行为型)

    北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...

  5. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

  6. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  7. [设计模式] 10 外观模式 facade

    外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构. ...

  8. 设计模式 笔记 外观模式 Facade

    //---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...

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

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

随机推荐

  1. 鸟哥私房菜学习——centos 7_安装

    下面是我安装时遇到问题后搜索找到的可行办法: 准备工具: 8G左右U盘; 最新版UltraISO; CentOS7光盘镜像; CentOS7的镜像文件,可以在网易的开源镜像站或者阿里云的开源镜像站下载 ...

  2. Java中的基本类型和包装类型区别

    首先看一下几个测试题,验证一下java中对基本类型和包装类型的理解,看看最后输出的答案对不对,答案在这篇博客中哦: // 第一题: 基本类型和包装类型 int a = 100; Integer b = ...

  3. python网络编程中互斥锁与进程之间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  4. 洛谷P3379 【模板】最近公共祖先(LCA)——LCA

    给一手链接 https://www.luogu.com.cn/problem/P3379 算是lca的模板吧 #include<cstdio> #include<cstring> ...

  5. LeetCode #1021. Remove Outermost Parentheses 删除最外层的括号

    https://leetcode-cn.com/problems/remove-outermost-parentheses/ Java Solution class Solution { public ...

  6. [暑假集训Day4T3]曲线

    三分模板. 三分法求单峰函数最优值,之后每次取所有二次函数最优值即可 #pragma GCC optimize(3,"Ofast","inline") #inc ...

  7. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...

  8. vue项目中配置favicon图标

    如上图所示,页面顶部的小图标会让页面显得高大上,一般把这种图标叫做favicon图标.利用vue-cli脚手架搭建的项目,如果不手动配置,页面中是不会显示favicon图标. 不配置是这样子的: fa ...

  9. 2019-9-2-git镜像仓库

    title author date CreateTime categories git镜像仓库 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:23:3 ...

  10. MySQL05-- 客户端工具及SQL语句

    目录 MySQL客户端工具及SQL语句 一.客户端命令介绍 二.接收用户的SQL语句 三.字符集定义 四.字符集设置 五.select的高级用法(扩展) MySQL客户端工具及SQL语句 一.客户端命 ...