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 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...
随机推荐
- Java复习10.Servlet编程
Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...
- C++复习4.函数设计基础
C/C++ 函数设计基础 20130918 函数式程序的基本功能单元,是模块化程序设计的基础,即使函数的功能正确是不够的,因为函数设计的细微缺点很容易导致函数被错用. 了解函数的基本知识,堆栈和堆的相 ...
- SSM整合AOP,日志框架和拦截器
前言 日志是所有系统必不可少的部分,而AOP在MVC通常用于监控方法调用,可以生成一个traceid,记录从用户调用到底层数据库的数据链路,帮助监控和排查问题. AOP 现在做一个简单的前置切面,用来 ...
- redis在.net架构中的应用(1)--利用servicestack连接redis
引言:作为少有的.net架构下的大型网站,stackoverflow曾发表了一篇文章,介绍了其技术体系,原文链接http://highscalability.com/blog/2011/3/3/sta ...
- session、cookie、viewstate
session的用法 定义:保存在服务器内存的数据,sesson 只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上,session在默认情况下20分钟就过期,在页面之中最好不要过多使用,因 ...
- QUnit 学习笔记 使用说明(一)
一.单元测试前言 什么是单元测试? 如果是新接触单元测试的童鞋,简要的解释:就是一个JS函数/功能/模块的测试. 单元测试的工具:这里介绍QUnit Qunit原本是jqury家的,不过现在已经独立了 ...
- kibana安装
kibana,ELK中的K,主要为ES提供界面化操作,据说还是比较炫的,今天安装5.5.2版本进行尝试一把. 安装过程不难,简单的配置了一下端口和IP即可,难度不大. config下的kibana.y ...
- L156
China has specified the definition and diagnosis standard for internet addiction in its latest adole ...
- mybatis环境搭建和开发步骤
环境搭建 第一步:导入jar包 第二步:导入核心配置文件(mybatis-config.xml) <?xml version="1.0" encoding="UTF ...
- FFmpeg再学习 -- SDL 环境搭建和视频显示
继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作 一.SDL 简介 参看:WIKI -- Simple DirectMedia Layer 参看:最简单的视音频播放示例9:SD ...