[设计模式]外观模式(Java实现)

Jun 12, 2015


一、概述:

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

二、适用性:

1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。

2、客户程序与抽象类的实现部分之间存在着很大的依赖性。

3、当你需要构建一个层次结构的子系统时,使用外观模式定义子系统中每层的入口点。

三、组成

1、外观(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的子系统的功能和责任。

2、子系统角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被外观角色调用。

实例:

public class Camara {    
    public void turnOn()    
    {    
        System.out.println("开启摄像头!");    
    }    
        
    public void turnOff()    
    {    
        System.out.println("关闭摄像头!");    
    }    
}    

public class Light {  
    public void turnOn()  
    {  
        System.out.println("开灯!");  
    }  
      
    public void turnOff()  
    {  
        System.out.println("关灯!");  
    }  
}  

public class Sensor {  
    public void activate()  
    {  
        System.out.println("开启感应器!");  
    }  
      
    public void deactivate()  
    {  
        System.out.println("关闭感应器!");  
    }  
}  
public class MyFacade {  
    private static Camara c1, c2;  
    private static Light l1, l2, l3;  
    private static Sensor s;  
      
    static  
    {  
        c1 = new Camara();  
        c2 = new Camara();  
        l1 = new Light();  
        l2 = new Light();  
        l3 = new Light();  
        s = new Sensor();  
    }  
      
    public static void activate()  
    {  
        c1.turnOn();  
        c2.turnOn();  
          
        l1.turnOn();  
        l2.turnOn();  
        l3.turnOn();  
          
        s.activate();  
    }  
      
    public static void deactivate()  
    {  
        c1.turnOff();  
        c2.turnOff();  
          
        l1.turnOff();  
        l2.turnOff();  
        l3.turnOff();  
          
        s.deactivate();  
    }  
}  

测试代码:

public class ClientTest {  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        //打开  
        MyFacade.activate();  
        //关闭  
        MyFacade.deactivate();  
    }  
  
}  

四、总结:

外观模式,简单实用。