一、外观模式概述

  外观模式也称为门面模式。

  核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用。

二、外观模式场景导入与示例代码

  场景:要想自己去注册一个公司,首先去工商局检测命名是否合法,再去质量监督局办理组织机构代码证,再去税务局办理税务登记,最后去工商银行开户。但是使用外观模式,只需要去注册公司的门面,里边的工作人员就会去办理上述证件,简单方便!

  

 /**
* 工商局
* @author CL
*
*/
public interface AIC {
void checkName(); //检测命名是否合法
} /**
* 陕西工商局
* @author CL
*
*/
class SNAIC implements AIC { @Override
public void checkName() {
System.out.println("在陕西工商局检测名字是否合法!");
} }
 /**
* 质监局
* @author CL
*
*/
public interface QSB {
void orgCodeCertificate(); //办理组织机构代码证
} class SNQSB implements QSB { @Override
public void orgCodeCertificate() {
System.out.println("在陕西质量监督局办理组织机构代码证!");
} }
 /**
* 税务局
* @author CL
*
*/
public interface TB {
void taxCertificate(); //办理税务登记证
} class SNTB implements TB { @Override
public void taxCertificate() {
System.out.println("在陕西税务局办理税务登记!");
} }
 /**
* 工商银行
* @author CL
*
*/
public interface ICBC {
void openAccount(); //开户
} /**
* 陕西工商银行
* @author CL
*
*/
class SNICBC implements ICBC { @Override
public void openAccount() {
System.out.println("在陕西工商银行开户!");
} }

  (1)不使用外观模式,自己去注册公司

 /**
* 自己去注册公司
* @author CL
*
*/
public class Client { public static void main(String[] args) {
AIC aic = new SNAIC();
aic.checkName(); QSB qsb = new SNQSB();
qsb.orgCodeCertificate(); TB tb = new SNTB();
tb.taxCertificate(); ICBC icbc = new SNICBC();
icbc.openAccount();
} }

  控制台输出:

在陕西工商局检测名字是否合法!
在陕西质量监督局办理组织机构代码证!
在陕西税务局办理税务登记!
在陕西工商银行开户!

  (2)使用外观模式去注册公司

 /**
* 注册公司的门面对象
* @author CL
*
*/
public class RegisterFacade { public void register() {
AIC aic = new SNAIC();
aic.checkName(); QSB qsb = new SNQSB();
qsb.orgCodeCertificate(); TB tb = new SNTB();
tb.taxCertificate(); ICBC icbc = new SNICBC();
icbc.openAccount();
}
}
 /**
* 测试使用外观模式去注册公司
* @author CL
*
*/
public class Client { public static void main(String[] args) {
RegisterFacade register = new RegisterFacade();
register.register();
} }

  控制台输出:

在陕西工商局检测名字是否合法!
在陕西质量监督局办理组织机构代码证!
在陕西税务局办理税务登记!
在陕西工商银行开户!

三、外观模式常用开发应用场景

  (1)JDBC封装后的,commons提供的DBUtils类,Hibernate提供的工具类,Spring JDBC工具类;

  (2)…………

GOF23设计模式之外观模式(facade)的更多相关文章

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

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

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

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

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

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

  4. 【GOF23设计模式】外观模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_外观模式.公司注册流程.迪米特法则 package com.test.facade; public interface 工 ...

  5. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. [设计模式] 10 外观模式 facade

    外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构. ...

  7. 设计模式 笔记 外观模式 Facade

    //---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...

  8. 【设计模式】—— 外观模式Facade

    前言:[模式总览]——————————by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...

  9. 结构型设计模式之外观模式(Facade)

    结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...

随机推荐

  1. C#运算符笔记

    C# 原来也可以进行向量运算,这里解决了一个为时已久的疑惑. operator struct Vector { public double x, y, z; public Vector(double ...

  2. 老鼠走迷宫(2)输出所有路径(C语言)

    需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...

  3. Dom4j下载及使用Dom4j读写XML简介(转)

    Dom4j下载及使用Dom4j读写XML简介 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:ht ...

  4. Java多线程编程实战指南(核心篇)读书笔记(五)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  5. React-Native进阶_4.底部标签栏TabBar

    原生项目中,我们对底部Tab 很熟悉,点击Tab标签可以切换页面,那么在React-Native 中我们该怎么实现呢. 在查了文档后,我们找到了一个TabBarIos ,这个是ios 下使用的Tab ...

  6. Unity内存优化技术测试案例

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  7. [置顶] 普通程序员如何入门AI

    毫无疑问,人工智能是目前整个互联网领域最火的行业,随着AlphaGo战胜世界围棋冠军,以及各种无人驾驶.智能家居项目的布道,人们已经意识到了AI就是下一个风口.当然,程序员是我见过对于新技术最敏感的一 ...

  8. 构造字典:DictionaryBase类和SortedList类

    DictionaryBase 类 msdn对DictionaryBase的文档解释 泛型KeyValuePair类 msdnd对泛型KeyValuePair类的文档解释 SortedList类 RUN ...

  9. .net collection tips

    1.数组对象都是Array的子类,Array是一个抽象类,不能显示实例化,Array提供了大量操作数组的静态方法 2.ArrayList其实是内部封装了一个array,实现了IList的接口.add ...

  10. Jmeter-ForEach控制器

    ForEach Controller需要配合‘用户定义的变量’来使用,作用是参数化 名称:字面意思,ForEach Controller的名称 注释:字面意思 输入变量前缀:变量的前缀:如要使用的变量 ...