• 12外观模式Facade


    一、什么是外观模式

      Facade模式也叫外观模式,是由GoF提出的 23种设计模式中的一种。Facade模式为一组具 有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

    二、外观模式的结构

    三、外观模式的角色和职责

      Facade     为调用方定义简单的调用接口。

      Clients     调用者。通过Facade接口调用提供某功能的内部类群。

      Packages     功能提供者。指提供功能的类群(模块或子系统)。

    A子系统

     1 /*
     2  * A子系统
     3  */
     4 public class SystemA {
     5     /*
     6      * A子系统实现功能
     7      */
     8     public void doSomething() {
     9         System.out.println("实现A子系统功能");
    10     }
    11 }

    B子系统

     1 /*
     2  * B子系统
     3  */
     4 public class SystemB {
     5 
     6     /*
     7      * B子系统实现功能
     8      */
     9     public void doSomething() {
    10         System.out.println("实现B子系统功能");
    11     }
    12 }

    C子系统

     1 /*
     2  * C子系统
     3  */
     4 public class SystemC {
     5 
     6     /*
     7      * C子系统实现功能
     8      */
     9     public void doSomething() {
    10         System.out.println("实现C子系统功能");
    11     }
    12 }

    外观

     1 //外观
     2 public class Facade {
     3     private SystemA systemA;
     4     private SystemB systemB;
     5     private SystemC systemC;
     6     
     7     public Facade() {
     8         systemA = new SystemA();
     9         systemB = new SystemB();
    10         systemC = new SystemC();
    11     }
    12     
    13     public void doABC() {
    14         this.systemA.doSomething();
    15         this.systemB.doSomething();
    16         this.systemC.doSomething();
    17     }
    18     
    19     public void doAB() {
    20         this.systemA.doSomething();
    21         this.systemB.doSomething();
    22     }
    23 }

    测试

    1 public class MainClass {
    2     public static void main(String[] args) {
    3         Facade facade = new Facade();
    4         facade.doABC();
    5     }
    6 }
    1 public class MainClass2 {
    2     public static void main(String[] args) {
    3         Facade facade = new Facade();
    4         facade.doAB();
    5     }
    6 }

    ====================================================================

    国载

    1 //国载
    2 public class GuoZai {
    3     
    4     public void mai() {
    5         System.out.println("买国债");
    6     }
    7 }

    股票

    1 //股票
    2 public class Gupiao {
    3     
    4     public void mai() {
    5         System.out.println("买股票");
    6     }
    7 }

    期货

    1 //期货
    2 public class Qihuo {
    3     
    4     public void chao() {
    5         System.out.println("买期货");
    6     }
    7 }

    基金

     1 //基金
     2 public class JiJin {
     3     private Gupiao gupiao;
     4     private GuoZai guozai;
     5     private Qihuo qihuo;
     6     
     7     public JiJin() {
     8         this.guozai = new GuoZai();
     9         this.gupiao = new Gupiao();
    10         this.qihuo = new Qihuo();
    11     }
    12     
    13     public void maiJijinA() {
    14         this.guozai.mai();
    15         this.gupiao.mai();
    16     }
    17     
    18     public void maiJijinB() {
    19         this.guozai.mai();
    20         this.gupiao.mai();
    21         this.qihuo.chao();
    22     }
    23 }

    测试

     1 public class MainClass {
     2     public static void main(String[] args) {
     3 //        //80年代,基金出现之前
     4 //        Gupiao gupiao = new Gupiao();
     5 //        gupiao.mai();
     6 //        
     7 //        Qihuo qihuo = new Qihuo();
     8 //        qihuo.chao();
     9 //        
    10 //        GuoZai guozhai = new GuoZai();
    11 //        guozhai.mai();
    12         //有了基金之后
    13 //        JiJin jijin = new JiJin();
    14 //        jijin.maiJijinA();
    15         JiJin jijin = new JiJin();
    16         jijin.maiJijinB();
    17     }
    18 }
  • 相关阅读:
    JAVA内部类详解
    表、栈和队列
    大型网站架构演化<二>
    eclipse中build path 中JDK与java compiler compliance level的问题(转)
    XFire构建服务端Service的两种方式
    SpringMVC简单例子
    Mybatis
    java静态代码块 类加载顺序问题。
    Tomcat6.0数据源配置
    解析xml的几种方式
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9033113.html
Copyright © 2020-2023  润新知