设计模式之外观模式

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

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

 

posted @ 2018-04-09 23:29  花雪依蒿  阅读(135)  评论(0编辑  收藏  举报