GOF23设计模式之外观模式(facade)

一、外观模式概述

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

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

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

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

  

 1 /**
 2  * 工商局
 3  * @author CL
 4  *
 5  */
 6 public interface AIC {
 7     void checkName();    //检测命名是否合法
 8 }
 9 
10 /**
11  * 陕西工商局
12  * @author CL
13  *
14  */
15 class SNAIC implements AIC {
16 
17     @Override
18     public void checkName() {
19         System.out.println("在陕西工商局检测名字是否合法!");
20     }
21     
22 }
 1 /**
 2  * 质监局
 3  * @author CL
 4  *
 5  */
 6 public interface QSB {
 7     void orgCodeCertificate();    //办理组织机构代码证
 8 }
 9 
10 class SNQSB implements QSB {
11 
12     @Override
13     public void orgCodeCertificate() {
14         System.out.println("在陕西质量监督局办理组织机构代码证!");
15     }
16     
17 }
 1 /**
 2  * 税务局
 3  * @author CL
 4  *
 5  */
 6 public interface TB {
 7     void taxCertificate();    //办理税务登记证
 8 }
 9 
10 class SNTB implements TB {
11 
12     @Override
13     public void taxCertificate() {
14         System.out.println("在陕西税务局办理税务登记!");
15     }
16     
17 }
 1 /**
 2  * 工商银行
 3  * @author CL
 4  *
 5  */
 6 public interface ICBC {
 7     void openAccount();    //开户 
 8 }
 9 
10 /**
11  * 陕西工商银行
12  * @author CL
13  *
14  */
15 class SNICBC implements ICBC {
16 
17     @Override
18     public void openAccount() {
19         System.out.println("在陕西工商银行开户!");
20     }
21     
22 }

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

 1 /**
 2  * 自己去注册公司
 3  * @author CL
 4  *
 5  */
 6 public class Client {
 7     
 8     public static void main(String[] args) {
 9         AIC aic = new SNAIC();
10         aic.checkName();
11         
12         QSB qsb = new SNQSB();
13         qsb.orgCodeCertificate();
14         
15         TB tb = new SNTB();
16         tb.taxCertificate();
17         
18         ICBC icbc = new SNICBC();
19         icbc.openAccount();
20     }
21 
22 }

  控制台输出:

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

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

 1 /**
 2  * 注册公司的门面对象
 3  * @author CL
 4  *
 5  */
 6 public class RegisterFacade {
 7 
 8     public void register() {
 9         AIC aic = new SNAIC();
10         aic.checkName();
11         
12         QSB qsb = new SNQSB();
13         qsb.orgCodeCertificate();
14         
15         TB tb = new SNTB();
16         tb.taxCertificate();
17         
18         ICBC icbc = new SNICBC();
19         icbc.openAccount();
20     }
21 }
 1 /**
 2  * 测试使用外观模式去注册公司
 3  * @author CL
 4  *
 5  */
 6 public class Client {
 7     
 8     public static void main(String[] args) {
 9         RegisterFacade register = new RegisterFacade();
10         register.register();
11     }
12 
13 }

  控制台输出:

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

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

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

  (2)…………

posted @ 2018-01-22 10:20  C3Stones  阅读(170)  评论(0编辑  收藏  举报