外观模式(Facade)

定义

  模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。

UML图

  

例子

  方法A

package com.csdhsm.pattemdesign.facade;

/**  
 * @Title:  ServiceA.java   
 * @Description: 方法A
 * @author: Han   
 * @date:   2016年6月22日 下午8:22:33  
 */  
public class ServiceA {
    
    public void methodA() {
        System.out.println("ServiceA === > MethodA");
    }
}

  方法B

package com.csdhsm.pattemdesign.facade;

/**  
 * @Title:  ServiceB.java   
 * @Description: 方法B
 * @author: Han   
 * @date:   2016年6月22日 下午8:25:03  
 */  
public class ServiceB {
    
    public void methodB() {
        System.out.println("ServiceB === > MethodB");
    }
}

  方法C

package com.csdhsm.pattemdesign.facade;

/**  
 * @Title:  ServiceC.java   
 * @Description: 方法C
 * @author: Han   
 * @date:   2016年6月22日 下午8:25:29  
 */  
public class ServiceC {
    
    public void methodC() {
        System.out.println("ServiceC === > MethodC");
    }
}

  外观模式核心类

package com.csdhsm.pattemdesign.facade;

/**  
 * @Title:  Facade.java   
 * @Description: 外观模式 核心类
 * @author: Han   
 * @date:   2016年6月22日 下午8:26:09  
 */  
public class Facade {
    
    private ServiceA a;
    private ServiceB b;
    private ServiceC c;
    
    public Facade() {
        a = new ServiceA();
        b = new ServiceB();
        c = new ServiceC();
    }
    
    //方法A
    public void methodA() {
        a.methodA();
        b.methodB();
    }
    
    //方法B
    public void methodB() {
        b.methodB();
        c.methodC();
    }
}

  客户端

package com.csdhsm.pattemdesign.facade;

public class Solution {
    
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.methodA();
        facade.methodB();
    }
}

  结果

  OK,成功

总结

在遇到以下情况使用Facade模式:
          1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
          2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
          3、当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点,如果子系统之间是相互依赖的,你可以让它们仅通过Facade 进行通讯,从而简化了它们之间的依赖关系。

 

 posted on 2016-06-22 20:42  韩思明  阅读(125)  评论(0编辑  收藏  举报