一、什么是外观模式

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

二、外观模式的结构

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

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

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

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

A子系统

 /*
* A子系统
*/
public class SystemA {
/*
* A子系统实现功能
*/
public void doSomething() {
System.out.println("实现A子系统功能");
}
}

B子系统

 /*
* B子系统
*/
public class SystemB { /*
* B子系统实现功能
*/
public void doSomething() {
System.out.println("实现B子系统功能");
}
}

C子系统

 /*
* C子系统
*/
public class SystemC { /*
* C子系统实现功能
*/
public void doSomething() {
System.out.println("实现C子系统功能");
}
}

外观

 //外观
public class Facade {
private SystemA systemA;
private SystemB systemB;
private SystemC systemC; public Facade() {
systemA = new SystemA();
systemB = new SystemB();
systemC = new SystemC();
} public void doABC() {
this.systemA.doSomething();
this.systemB.doSomething();
this.systemC.doSomething();
} public void doAB() {
this.systemA.doSomething();
this.systemB.doSomething();
}
}

测试

 public class MainClass {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doABC();
}
}
 public class MainClass2 {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doAB();
}
}

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

国载

 //国载
public class GuoZai { public void mai() {
System.out.println("买国债");
}
}

股票

 //股票
public class Gupiao { public void mai() {
System.out.println("买股票");
}
}

期货

 //期货
public class Qihuo { public void chao() {
System.out.println("买期货");
}
}

基金

 //基金
public class JiJin {
private Gupiao gupiao;
private GuoZai guozai;
private Qihuo qihuo; public JiJin() {
this.guozai = new GuoZai();
this.gupiao = new Gupiao();
this.qihuo = new Qihuo();
} public void maiJijinA() {
this.guozai.mai();
this.gupiao.mai();
} public void maiJijinB() {
this.guozai.mai();
this.gupiao.mai();
this.qihuo.chao();
}
}

测试

 public class MainClass {
public static void main(String[] args) {
// //80年代,基金出现之前
// Gupiao gupiao = new Gupiao();
// gupiao.mai();
//
// Qihuo qihuo = new Qihuo();
// qihuo.chao();
//
// GuoZai guozhai = new GuoZai();
// guozhai.mai();
//有了基金之后
// JiJin jijin = new JiJin();
// jijin.maiJijinA();
JiJin jijin = new JiJin();
jijin.maiJijinB();
}
}

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. c# 上传图片流,php端(laravel框架)接收处理方法

    c# httppost方法 public struct PostFile { public string name; public string filename; public Stream bit ...

  2. 导出putty配置

    原文链接:http://downloadsquad.switched.com/2007/02/01/howto-transfer-your-putty-settings-between-compute ...

  3. R12.1.3 & R12.2.X 注册客户化应用

    R12.2 官方出了运行补丁脚本就可以自动创建客户化应用,所以也把此补丁应用在 R12.1.3上验证一下其可行性,做出以下实验. 1.创建客户化应用账号CUX --login user system ...

  4. 关于iphone6/5/4s 在iOS8.0系统下 仅仅读@3x图片

    做iphone6和plus适配时候发现一个问题,先来看图(一下讨论所有在真机下完毕,非模拟器) 128*750图片是  nav@2x.png watermark/2/text/aHR0cDovL2Js ...

  5. uva 1629切蛋糕(dp)

    有一个n行m列的网格蛋糕,上面有一些樱桃.求使得每块蛋糕上都有一个樱桃的分割最小长度 思路:dp. #include<cstdio> #include<cstring> #in ...

  6. 基于 CentOS Mysql 安装与主从同步配置详解

    CentOS Mysql 安装 Mysql (Master/Slave) 主从同步 1.为什么要使用主从同步 1.如果主服务器出现问题,可以快速切换到从服务器提供的服务 2.可以在从服务器上执行查询操 ...

  7. Std::map too few template arguments

    在上述的代码中,红色波浪线的部分编译的时候报错: error C2976: 'std::map' : too few template arguments 换成std::map<std::str ...

  8. Redis深入之对象

    Redis对象系统 前面介绍了Redis用到的全部主要数据结构,如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合等 Redis并没有直接使用这些数据结构来实现键值对数据库.而是基于这些数 ...

  9. Python:提取网页中的电子邮箱

    import requests, re #regex = r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"#这个正则表达式过滤 ...

  10. 免费网络视频监控软件cmsclient

    http://www.brickcom.com/products/DetailView.php?modelname=CMS-Client&series=CMS#product-support ...