• 设计模式之外观模式


    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

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

  • 相关阅读:
    常见算法之10---从第一字符串中删除第二个字符串中所有的字符
    常见算法之9---折半查找(二分查找)
    常用算法之8---找到数组中只出现一次的数字
    常见算法之7---判断是否所有小字符串里的字母在大字符串里都有
    常见算法之6---判断集合S之中是否存在两个数之和为指定大小N
    常见算法之5---单例模式[java]
    常见算法之4---正整数二进制表示中的1的个数
    常见算法之3---数组中出现次数超过一半的数字
    UVa 495
    《编程之美》笔记(一)
  • 原文地址:https://www.cnblogs.com/huaxueyihao/p/8711491.html
Copyright © 2020-2023  润新知