facade外观模式
通过买股票与通过基金买股票引出外观模式:
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外观模式的更多相关文章
- (转载)设计模式学习笔记(十一)——Facade外观模式
(转载)http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户 ...
- 设计模式10: Facade 外观模式(结构型模式)
Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...
- Facade——外观模式
Facade外观模式,也是比较常用的一种模式,基本上所有软件系统中都会用到. GOF 在<设计模式>一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一 ...
- java演示facade(外观)模式
实际应用中,原来的代码涉及多个子系统时,重新进行类的设计,将原来分散在源码中的类结构及方法重新组合,形成新的.统一的接口,供上层应用使用. Facade所面对的往往是多个类或其它程序单元,通过重新组合 ...
- 设计模式(十一):FACADE外观模式 -- 结构型模式
1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...
- 设计模式(10)--Facade(外观模式)--结构型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使 ...
- Facade - 外观模式
1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...
- Facade(外观模式或门面模式)
常用的模式之一. 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 完美地体现了依赖倒转原则和迪米特法则的思想. Facade模式应用场景: 首先 ...
- 15、Facade 外观模式
什么是Facade模式 随着系统越来越复杂,我们需要把细节隐藏起来,给客户端提供一个统一的接口.在这种需求下facade模式诞生了.该模式比较简单,我们只需要在系统变得复杂把它运用上来,这样底层跟客户 ...
随机推荐
- centos7 python3 安装
mkdir /usr/python3.5 tar -xf Python-3.5.1.tgz cd Python-3.5.1 ./configure --prefix=/usr/python3.5 ma ...
- 美图秀秀DBA谈MySQL运维及优化
美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...
- 统计编程的框架与R语言统计分析基础——摘(1)
清屏命令ctrl+L 一.基础 1.产生数据结构 a.直接输入 b.冒号,1:10 c.seq函数 d.rep函数 > 1:10 [1] 1 2 3 4 5 6 7 8 9 10 > 10 ...
- Django-models进阶
Django-models进阶 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select ...
- 已有模板与tp框架的结合 (前台)
已有模板与tp框架的结合 具体步骤 A.复制模板文件到view指定目录 B. 复合css .js.img.静态资源文件到系统指定目录 C. 把静态资源(css,js,img)文件的路径设置为“常量 ...
- 2018 Multi-University Training Contest 6 Solution
A - oval-and-rectangle 题意:给出一个椭圆的a 和 b,在$[0, b]中随机选择c$ 使得四个顶点在椭圆上构成一个矩形,求矩形周长期望 思路:求出每种矩形的周长,除以b(积分) ...
- SQL学习笔记三(补充-3)之MySQL完整性约束
阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 介绍 约束条件与数据 ...
- ZLYD团队第三周项目总结
ZLYD团队第三周项目总结 项目进展 我们的吃豆子游戏的程序由八个文件组成:Wall.java.Gold.java.Player.java.Fruit.java.Enemy.java.Ticker.j ...
- IMX6Q GPIO定义
ret = gpio_request_array(mx6q_sabresd_flexcan_gpios, ARRAY_SIZE(mx6q_sabresd_ ...
- STM32组合设备实现USB转双串口
USB转双串口,核心技术就在于组合设备(USB Composite)的实现,组合设备的实现,其核心技术在于描述符的实现,下面我们先给出描述符:设备描述符 [C] 纯文本查看 复制代码 ? 00001 ...