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 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...
随机推荐
- 013——数组(十三) array_push array_rand array_reverse
<?php /* 数组 array_push array_rand array_reverse */ //array_push()在数组的末端,增加一个或多个元素,入栈 /*$array = a ...
- IEnumerable.Select和SelectMany的区别
例子(一个人可以有多个手机) public class People { public string Name { get; set; } public List<Phone> Phone ...
- hdu4453
题解: splay模板 删除,翻转等等 代码: #include<cstdio> #include<cstring> #include<cmath> #includ ...
- flask中过滤器的使用
过滤器 过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. 使用方 ...
- JSP的EL和JSTL解析
1. EL 简介EL 全名为Expression Language,所有EL都是以${ 为起始.以} 为结尾的.EL 语法很简单,它最大的特点就是使用上很方便. 接下来介绍EL 主要的语法结构: ${ ...
- shell脚本实例二
练习题一:对已经存在的用户做密码的修改等操作 vim user_ctrl.sh ##进行如下编写 #!/bin/bashShow(){ read -p ...
- 记录一下前端ajax实现增删改功能的步骤
主要依赖三个按钮:新增,删除,编辑 新增:点击时创建新的LI或者TR并append到父级里,此时无需调动后台接口(如果新增需要弹窗输入val则可以调用): 删除:判断this是否有后台传过来的id值, ...
- 文件的copy
def mycopy(src_filename, dst_filename): try: fr = open(src_filename, "rb") try: try: fw = ...
- BZOJ2342 Shoi2011 双倍回文 【Manacher】
BZOJ2342 Shoi2011 双倍回文 Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输 ...
- ubuntu 新手帖
作为菜鸟,接触ubuntu的时间不长,遇到一些问题,在这总结一下,可能不全不完善,但是希望能有用: 1,ubuntu 12.04的gedit打开中文记事本全是乱码的处理 参考:http://bbs.c ...