GOF23设计模式之外观模式(facade)
一、外观模式概述
外观模式也称为门面模式。
核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用。
二、外观模式场景导入与示例代码
场景:要想自己去注册一个公司,首先去工商局检测命名是否合法,再去质量监督局办理组织机构代码证,再去税务局办理税务登记,最后去工商银行开户。但是使用外观模式,只需要去注册公司的门面,里边的工作人员就会去办理上述证件,简单方便!
/**
* 工商局
* @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)的更多相关文章
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 【GOF23设计模式】外观模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_外观模式.公司注册流程.迪米特法则 package com.test.facade; public interface 工 ...
- 设计模式之外观模式(Facade)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- [设计模式] 10 外观模式 facade
外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构. ...
- 设计模式 笔记 外观模式 Facade
//---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...
- 【设计模式】—— 外观模式Facade
前言:[模式总览]——————————by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...
- 结构型设计模式之外观模式(Facade)
结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...
随机推荐
- C# 设计模式巩固 - 抽象工厂模式
前言 继续工厂模式高级版,抽象工厂模式.抽象工厂模式其实是从工厂方法模式拓展而来.在实际的生活中一个工厂的产品不可能是单一的,肯定是多种系列的产品. 介绍 - 抽象工厂模式 定义:(摘自百度百科~ ...
- XML方式实现Spring的AOP
1.编写切面类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package com.fz.an ...
- window环境下创建Flask项目需要安装常见模块命令
安装Flask环境 pip install flask==0.10.1 使用命令行操作 pip install flask-script 创建表单 pip install flask-wtf 操作数据 ...
- Jquery如何获取ASP.NET服务器控件的值
关键字: Jquery 服务器控件 获取值 由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,总结有以下3种方法: 服务器控件代码:<asp:Te ...
- Java API访问ZK的权限控制
无权限访问结点 /** * 对于ZK的授权访问 * Created by liuhuichao on 2017/7/27. */ public class AutoSample { private s ...
- 激活函数之softmax介绍及C++实现
下溢(underflow):当接近零的数被四舍五入为零时发生下溢.许多函数在其参数为零而不是一个很小的正数时才会表现出质的不同.例如,我们通常要避免被零除或避免取零的对数. 上溢(overflow): ...
- 使用git将代码推到coding
1:前提下载好Git 2:在电脑上创建一个文件夹,打开此文件夹,单击右键—〉 git bash here 3:输入git init 完成后会在此文件夹下生成一个隐藏的.git后缀文件 4:将你的代码添 ...
- Git详解之九 Git内部原理
以下内容转载自:http://www.open-open.com/lib/view/open1328070620202.html Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各 ...
- NHibernate 01 [简述]
本节内容: 系列简述 NHibernate是什么? NHibernate好处? 1.系列简述 最近在项目中使用到NHibernate,所以记录下自己学习的内容和步骤. 2.NHibernate是什么? ...
- 自定义requestAnimationFrame帧频
requestAnimationFrame(callback)触发的callback方法会接受一个时间戳参数,所以如果不想直接跟随浏览器系统帧频的话, 就可以利用这个时间戳参数来做到自定义帧频,做法就 ...