zoukankan      html  css  js  c++  java
  • 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)…………

  • 相关阅读:
    vue生命周期过程做了什么
    css_css3_实用属性_随时补充更新
    echarts的symbol引用本地图片写法
    无废话设计模式(1)--简单工厂、工厂方法、抽象工厂
    JavaWeb--Maven学习
    SpringCloud Alibaba实战 -引入服务网关Gateway
    从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 抽象的队列式同步器
    架构的搭建(一)SpringCloud Alibaba
    配置中心之Nacos简介,使用及Go简单集成
    RabbitMQ
  • 原文地址:https://www.cnblogs.com/cao-lei/p/8327790.html
Copyright © 2011-2022 走看看