通过买股票与通过基金买股票引出外观模式:

package com.disign.facade;

/**
* Created by zhen on 2017-05-18.
*/
public class TestStock {
public void run1(){
Stock1 gu1 = new Stock1();
Stock2 gu2 = new Stock2();
Stock3 gu3 = new Stock3(); gu1.buy();
gu2.buy();
gu3.buy(); gu1.sell();
gu2.sell();
gu3.sell();
} public void run2(){
Fund fund = new Fund();
fund.buyFund();
fund.sellFund();
}
}
interface transaction{
public void sell();
public void buy();
}
class Stock1 implements transaction{
public void sell(){ }
public void buy(){ }
}
class Stock2 implements transaction{
public void sell(){ }
public void buy(){ }
}
class Stock3 implements transaction{
public void sell(){ }
public void buy(){ }
} class Fund{
Stock1 gu1;
Stock2 gu2;
Stock3 gu3;
public void Fund(){
gu1 = new Stock1();
gu2 = new Stock2();
gu3 = new Stock3();
}
public void buyFund(){
gu1.buy();
gu2.buy();
gu3.buy();
}
public void sellFund(){
gu1.sell();
gu2.sell();
gu3.sell();
}
}

外观模式Facade,为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子接口更加容易使用

package com.disign.facade;

/**
* Created by zhen on 2017-05-18.
*/
public class TestFacade {
public static void main(String[] args){
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
class SubSystemOne{
public void methodOne(){ }
}
class SubSystemTwo{
public void methodTwo(){ }
}
class SubSystemThree{
public void methodThree(){ }
}
class SubSystemFour{
public void methodFour(){ }
}
class Facade{
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four; public Facade(){
this.one = new SubSystemOne();
this.two = new SubSystemTwo();
this.three = new SubSystemThree();
this.four = new SubSystemFour();
} public void methodA(){
System.out.println("方法组A()");
one.methodOne();
two.methodTwo();
four.methodFour();
}
public void methodB(){
System.out.println("方法组B()");
two.methodTwo();
three.methodThree();
}
}

何时使用外观模式?

首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade。

其次,在开发阶段,子系统往往应为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖

在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和拓展了,此时使用外观也是非常合适的。为新系统开发一个外观Facade类,提供遗留代码的额比较清晰的简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

facade外观模式的更多相关文章

  1. (转载)设计模式学习笔记(十一)——Facade外观模式

    (转载)http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户 ...

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

    Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...

  3. Facade——外观模式

    Facade外观模式,也是比较常用的一种模式,基本上所有软件系统中都会用到. GOF 在<设计模式>一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一 ...

  4. java演示facade(外观)模式

    实际应用中,原来的代码涉及多个子系统时,重新进行类的设计,将原来分散在源码中的类结构及方法重新组合,形成新的.统一的接口,供上层应用使用. Facade所面对的往往是多个类或其它程序单元,通过重新组合 ...

  5. 设计模式(十一):FACADE外观模式 -- 结构型模式

    1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...

  6. 设计模式(10)--Facade(外观模式)--结构型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使 ...

  7. Facade - 外观模式

    1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...

  8. Facade(外观模式或门面模式)

    常用的模式之一. 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 完美地体现了依赖倒转原则和迪米特法则的思想. Facade模式应用场景: 首先 ...

  9. 15、Facade 外观模式

    什么是Facade模式 随着系统越来越复杂,我们需要把细节隐藏起来,给客户端提供一个统一的接口.在这种需求下facade模式诞生了.该模式比较简单,我们只需要在系统变得复杂把它运用上来,这样底层跟客户 ...

随机推荐

  1. Office 2003 2007 2010 配置进度 正在配置 解决方案 (转载)

    在安装过Office2003.2007 或者2010之后,如果没有选择全部的组件,或者是因为安装到非系统盘,有时候打开 Office 文档的时候就会出现正在配置Office,或者Office配置进度的 ...

  2. mydumper原理介绍

      mydumper的安装:http://www.cnblogs.com/lizhi221/p/7010174.html   mydumper介绍   MySQL自身的mysqldump工具支持单线程 ...

  3. linux更改文件或目录的属主和属组

    chown  1.效用  更改一个或者多个文件或者目录的属主以及属组,使用职权范围是超等用户  2.格局  chown [选项] 用户或者组 文件  3.首要参量  --dereference:受影响 ...

  4. Learning to Rank之Ranking SVM 简介

    排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank简 ...

  5. 20145315 《Java程序设计》第十周学习总结

    20145315 <Java程序设计>第十周学习总结 教材学习内容总结 网络概述 为了能够方便的识别网络上的每个设备,网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址.IP地址实 ...

  6. Qt无法调试Qvector

    现象: 解决: 打开文件 $(VSDIR)\Common7\Packages\Debugger\autoexp.dat (VSDIR是本机Visual Studio的安装目录)把定义QVector和Q ...

  7. Ubuntu 安装zookeeper

    下载zookeeper   Zookeeper下载 下载以后将文件迁移到/home/Hadoop/文件夹下面 hongdada@ubuntu:~/Downloads$ sudo mv zookeepe ...

  8. ZooKeeper增加Observer部署模式提高性能(转)

    除了Leader和Follow模式之外,还有第三种模式:Observer模式. Observer:在不伤害写性能的情况下扩展ZooKeeper. 虽然通过Client直接连接到ZooKeeper集群的 ...

  9. jvm 内存调整

    top查看java占用的内存比较多 top - :: up days, :, user, load average: 0.03, 0.05, 0.05 Tasks: total, running, s ...

  10. python2.7和python3.6共存,使用pip安装第三方库

    因为一般情况下,window命令行运行pip,默认的情况是运行python3.6的pip,安装第三方库的路径也是python3.6,安装路径是: 如何运行在2.7环境下安装PIP呢?有网上的教程说需要 ...