12外观模式Facade
一、什么是外观模式
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的更多相关文章
- 【转】设计模式(九)外观模式Facade(结构型)
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- 设计模式(九)外观模式Facade(结构型)
设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 设计模式-外观模式(Facade)
简介 外观模式(Facade),将外部与内部子系统的通信通过一个统一的门面对象进行. 由两部分组成: 门面角色:供外部调用,内部可能组装了多个子系统,多个方法. 子系统角色:子系统的方法也可以直接供外 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 设计模式(二)-- 外观模式(Facade)
设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- 外观模式facade
一句话,多外呈现一个统一接口,内部的具体实现不关心. 外观模式facade,其实就是在调用者 与 被调用的实现层 之间加一层 facade层,不管内部如何实现, 用什么技术 方法实现,对外呈现的外观是 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
随机推荐
- Eclipse 重构
使用重构工具可以快捷地将代码变成整洁而高度模块化的代码. Rename Rename 是 Eclipse 中最常用的重构.利用这个重构,可以对变量.类.方法.包.文件夹及几乎任何的 Java 标识符进 ...
- db2 OLAP函数使用
说起 DB2 在线分析处理,可以用很好很强大来形容.这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现.首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看 ...
- [原创]Java性能优化权威指南读书思维导图4
[原创]Java性能优化权威指南读书思维导图4
- C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用 在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cook ...
- html5中页面拨打电话的方式
<a href="tel:18688888888">拨号</a> <a href="sms:18688888888">发短信 ...
- ConcurrentHashMap 的实现原理
概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合.其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉 ...
- 解决Gerrit的git unpack error问题
今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉.于是我就简单地创建了一个空项目使用git push --force将其置空. 下午的时候,麻烦事情就来了,同事发 ...
- 谷歌Chrome浏览器无法安装插件的解决方法
Chrome浏览器已替代了个人多年使用的遨游浏览器,但众所周知,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,这不是死结吗 ...
- Java注解应用,自定义注解映射实现方案说明.
插件结构如图: 注册模块定义了三个:用于实体与表映射的注解,用于属性到表字段的映射,用于映射时过滤掉的注解. 1.用于实体与表映射的注解 package com.dobby.plugins.annot ...
- 12C新特性 -- 共享asm口令文件
12C中,ASM口令文件,可以提供本地.远程登录asm的验证.当然,要想使用asm口令文件验证,必须为每个asm创建一个口令文件. 如果是使用asm存储,asmca在配置asm磁盘组的会后,会自动为a ...