zoukankan      html  css  js  c++  java
  • 设计模式之外观模式

    Facade模式也叫做外观模式。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面。这个一致的简单界面别称作facade。

    Facade:

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

    Clients:

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

    Packages:

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

    例子:

    功能提供者A:

    package com.Design.Facade;
    
    /** 
     * @ClassName: SystemA 
     * @Description: A子系统
     * @author 
     * @date 2018年4月9日 下午10:37:17 
     * @version 1.0 
     */
    public class SystemA {
            
        /** 
        * @Title: doSomething 
        * @Description:  B子系统实现功能
        * @param     
        * @return void    
        * @throws 
        */
        public void doSomething(){
            System.out.println("实现A子系统的功能");
        }
    }
    View Code

    功能提供者B:

     1 package com.Design.Facade;
     2 
     3 /** 
     4  * @ClassName: SystemB
     5  * @Description: B子系统
     6  * @author 
     7  * @date 2018年4月9日 下午10:37:17 
     8  * @version 1.0 
     9  */
    10 public class SystemB {
    11         
    12     /** 
    13     * @Title: doSomething 
    14     * @Description:  B子系统实现功能
    15     * @param     
    16     * @return void    
    17     * @throws 
    18     */
    19     public void doSomething(){
    20         System.out.println("实现B子系统的功能");
    21     }
    22 }
    View Code

    功能提供者C:

     1 package com.Design.Facade;
     2 
     3 /** 
     4  * @ClassName: SystemC
     5  * @Description: C子系统
     6  * @author 
     7  * @date 2018年4月9日 下午10:37:17 
     8  * @version 1.0 
     9  */
    10 public class SystemC {
    11         
    12     /** 
    13     * @Title: doSomething 
    14     * @Description:  C子系统实现功能
    15     * @param     
    16     * @return void    
    17     * @throws 
    18     */
    19     public void doSomething(){
    20         System.out.println("实现C子系统的功能");
    21     }
    22 }
    View Code

    调用接口Facade:

     1 package com.Design.Facade;
     2 
     3 /** 
     4  * @ClassName: Facade 
     5  * @Description: 外观模式的调用接口
     6  * @author 
     7  * @date 2018年4月9日 下午11:26:40 
     8  * @version 1.0 
     9  */
    10 public class Facade {
    11 
    12     private SystemA systemA;
    13     private SystemB systemB;
    14     private SystemC systemC;
    15 
    16     public Facade() {
    17         systemA = new SystemA();
    18         systemB = new SystemB();
    19         systemC = new SystemC();
    20 
    21     }
    22 
    23     public void doSomething() {
    24         this.systemA.doSomething();
    25         this.systemB.doSomething();
    26         this.systemC.doSomething();
    27     }
    28 
    29     public void doABC() {
    30         this.systemA.doSomething();
    31         this.systemB.doSomething();
    32         this.systemC.doSomething();
    33     }
    34     
    35     public void doAB() {
    36         this.systemA.doSomething();
    37         this.systemB.doSomething();
    38     }
    39     
    40     public void doBC() {
    41         this.systemB.doSomething();
    42         this.systemC.doSomething();
    43     }
    44     
    45 
    46 }
    View Code

    客户端代用代码:

     1 package com.Design.Facade;
     2 
     3 public class MainClass {
     4 
     5     public static void main(String[] args) {
     6         
     7         
     8         Facade facade = new Facade();
     9 //        facade.doAB();
    10         facade.doAB();
    11         
    12         
    13         
    14     }
    15 
    16 }
    View Code

    综上:其实就是,将一个模块功能的引用交给一个类;然后,该类进行不同的组合调用。

  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/huaxueyihao/p/8711491.html
Copyright © 2011-2022 走看看