Java设计模式

设计模式——外观模式

2018-06-12  本文已影响0人  Ant_way

阎宏博士的《JAVA与模式》一书中开头是这样描述外观(Facade)模式的:
门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

外观模式(Facade模式)也叫门面模式,通过外观类的包装,将复杂的系统通过封装提供简单的接口供客户端使用,以便降低客户端的使用复杂度。外观模式Facade类提供一个上层接口,集成封装了各个子系统的方法供客户端使用。客户端只需要直接与外观角色交互,客户端与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。

在上面我们也提到了外观类的定义,将复杂的众多子系统接口进行封装提供简单接口供客户端使用,这个跟我们在实际的开发过程中遇到的工具类很相似,这里就介绍下外观类、工具类、示例类。

外观模式由两大角色组成:

UML图

Facade.png

示例代码:
子系统

/**
 * 子类系统A
 * @author Iflytek_dsw
 *
 */
class SubSystemA{
    public void createA(){
        System.out.println("createA()");
    }
    
    public void drawSystemA(){
        System.out.println("drawSystemA()");
    }
}
/**
 * 子类系统B
 * @author Iflytek_dsw
 *
 */
class SubSystemB{
    public void createB(){
        System.out.println("createA()");
    }
    
    public void drawSystemB(){
        System.out.println("SubSystemB()");
    }
}

外观类

/**
 * 外观类,用于抽象子类接口
 * @author Iflytek_dsw
 *
 */
public class FacadeMaker {
    private SubSystemA subSystemA;
    private SubSystemB subSystemB;
    
    public FacadeMaker(){
        subSystemA = new SubSystemA();
        subSystemB = new SubSystemB();
    }
    
    
    public void createAndDrawA(){
        subSystemA.createA();
        subSystemA.drawSystemA();
    }
    
    
    public void createAndDrawB(){
        subSystemB.createB();
        subSystemB.drawSystemB();
    }
}

客户端

public class Client {
    
    public static void main(String []args){
        FacadeMaker facadeMaker = new FacadeMaker();
        facadeMaker.createAndDrawA();
        facadeMaker.createAndDrawB();
    }
}

外观模式总结

优点

缺点

上一篇下一篇

猜你喜欢

热点阅读