一、什么是外观模式

  Facade模式也叫外观模式,是由GoF提出的 23种设计模式中的一种。Facade模式为一组具 有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

二、外观模式的结构

三、外观模式的角色和职责

  Facade    为调用方定义简单的调用接口。

  Clients    调用者。通过Facade接口调用提供某功能的内部类群。

  Packages    功能提供者。指提供功能的类群(模块或子系统)。

A子系统

  1. /*
  2. * A子系统
  3. */
  4. public class SystemA {
  5. /*
  6. * A子系统实现功能
  7. */
  8. public void doSomething() {
  9. System.out.println("实现A子系统功能");
  10. }
  11. }

B子系统

  1. /*
  2. * B子系统
  3. */
  4. public class SystemB {
  5.  
  6. /*
  7. * B子系统实现功能
  8. */
  9. public void doSomething() {
  10. System.out.println("实现B子系统功能");
  11. }
  12. }

C子系统

  1. /*
  2. * C子系统
  3. */
  4. public class SystemC {
  5.  
  6. /*
  7. * C子系统实现功能
  8. */
  9. public void doSomething() {
  10. System.out.println("实现C子系统功能");
  11. }
  12. }

外观

  1. //外观
  2. public class Facade {
  3. private SystemA systemA;
  4. private SystemB systemB;
  5. private SystemC systemC;
  6.  
  7. public Facade() {
  8. systemA = new SystemA();
  9. systemB = new SystemB();
  10. systemC = new SystemC();
  11. }
  12.  
  13. public void doABC() {
  14. this.systemA.doSomething();
  15. this.systemB.doSomething();
  16. this.systemC.doSomething();
  17. }
  18.  
  19. public void doAB() {
  20. this.systemA.doSomething();
  21. this.systemB.doSomething();
  22. }
  23. }

测试

  1. public class MainClass {
  2. public static void main(String[] args) {
  3. Facade facade = new Facade();
  4. facade.doABC();
  5. }
  6. }
  1. public class MainClass2 {
  2. public static void main(String[] args) {
  3. Facade facade = new Facade();
  4. facade.doAB();
  5. }
  6. }

====================================================================

国载

  1. //国载
  2. public class GuoZai {
  3.  
  4. public void mai() {
  5. System.out.println("买国债");
  6. }
  7. }

股票

  1. //股票
  2. public class Gupiao {
  3.  
  4. public void mai() {
  5. System.out.println("买股票");
  6. }
  7. }

期货

  1. //期货
  2. public class Qihuo {
  3.  
  4. public void chao() {
  5. System.out.println("买期货");
  6. }
  7. }

基金

  1. //基金
  2. public class JiJin {
  3. private Gupiao gupiao;
  4. private GuoZai guozai;
  5. private Qihuo qihuo;
  6.  
  7. public JiJin() {
  8. this.guozai = new GuoZai();
  9. this.gupiao = new Gupiao();
  10. this.qihuo = new Qihuo();
  11. }
  12.  
  13. public void maiJijinA() {
  14. this.guozai.mai();
  15. this.gupiao.mai();
  16. }
  17.  
  18. public void maiJijinB() {
  19. this.guozai.mai();
  20. this.gupiao.mai();
  21. this.qihuo.chao();
  22. }
  23. }

测试

  1. public class MainClass {
  2. public static void main(String[] args) {
  3. // //80年代,基金出现之前
  4. // Gupiao gupiao = new Gupiao();
  5. // gupiao.mai();
  6. //
  7. // Qihuo qihuo = new Qihuo();
  8. // qihuo.chao();
  9. //
  10. // GuoZai guozhai = new GuoZai();
  11. // guozhai.mai();
  12. //有了基金之后
  13. // JiJin jijin = new JiJin();
  14. // jijin.maiJijinA();
  15. JiJin jijin = new JiJin();
  16. jijin.maiJijinB();
  17. }
  18. }

12外观模式Facade的更多相关文章

  1. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  2. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

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

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

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

    简介 外观模式(Facade),将外部与内部子系统的通信通过一个统一的门面对象进行. 由两部分组成: 门面角色:供外部调用,内部可能组装了多个子系统,多个方法. 子系统角色:子系统的方法也可以直接供外 ...

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

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

  6. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  7. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  8. 外观模式facade

    一句话,多外呈现一个统一接口,内部的具体实现不关心. 外观模式facade,其实就是在调用者 与 被调用的实现层 之间加一层 facade层,不管内部如何实现, 用什么技术 方法实现,对外呈现的外观是 ...

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

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

随机推荐

  1. Eclipse 重构

    使用重构工具可以快捷地将代码变成整洁而高度模块化的代码. Rename Rename 是 Eclipse 中最常用的重构.利用这个重构,可以对变量.类.方法.包.文件夹及几乎任何的 Java 标识符进 ...

  2. db2 OLAP函数使用

    说起 DB2 在线分析处理,可以用很好很强大来形容.这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现.首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看 ...

  3. [原创]Java性能优化权威指南读书思维导图4

    [原创]Java性能优化权威指南读书思维导图4

  4. C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie

    网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...

  5. html5中页面拨打电话的方式

    <a href="tel:18688888888">拨号</a> <a href="sms:18688888888">发短信 ...

  6. ConcurrentHashMap 的实现原理

    概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合.其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉 ...

  7. 解决Gerrit的git unpack error问题

    今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉.于是我就简单地创建了一个空项目使用git push --force将其置空. 下午的时候,麻烦事情就来了,同事发 ...

  8. 谷歌Chrome浏览器无法安装插件的解决方法

    Chrome浏览器已替代了个人多年使用的遨游浏览器,但众所周知,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,这不是死结吗 ...

  9. Java注解应用,自定义注解映射实现方案说明.

    插件结构如图: 注册模块定义了三个:用于实体与表映射的注解,用于属性到表字段的映射,用于映射时过滤掉的注解. 1.用于实体与表映射的注解 package com.dobby.plugins.annot ...

  10. 12C新特性 -- 共享asm口令文件

    12C中,ASM口令文件,可以提供本地.远程登录asm的验证.当然,要想使用asm口令文件验证,必须为每个asm创建一个口令文件. 如果是使用asm存储,asmca在配置asm磁盘组的会后,会自动为a ...