Java设计模式(十):外观模式

原创文章,转载请注明原文章地址,谢谢!

外观模式 Facade Pattern

外观模式,顾名思义,对于客户端来讲,只能看到外观,不知道具体的实现,通过外观实现需求即可。

外观模式的角色
  • 子系统组件:一个独立的子系统,不知道外观组件的存在,只知道接收分配给它的任务完成。
  • 外观组件:知道子系统的功能,将这些子系统的功能抽象组合。
示例

举一个生活中的例子,在晚上下班回家的时候,回到家,通过开关打开电视、电脑、电灯,第二天早上上班的时候,再依次关掉这些电器。其实还有一个方法就是,开总闸关总闸,就不需要一个个通过开关操作了。在外观模式中,电闸就是外观组件,暴露给客户端使用的,而电闸知道具体的电器实现,是将它们组合起来。

  • 子系统组件
public class Television {
    public void turnOn() {
        System.out.println("开电视...");
    }

    public void turnOff() {
        System.out.println("关电视...");
    }
}
public class Computer {
    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 SwitchControl {
    private Television television;
    private Computer computer;
    private Light light;

    public SwitchControl() {
        this.television = new Television();
        this.computer = new Computer();
        this.light = new Light();
    }

    public void turnOn() {
        television.turnOn();
        computer.turnOn();
        light.turnOn();
    }

    public void turnOff() {
        television.turnOff();
        computer.turnOff();
        light.turnOff();
    }
}
  • 测试
public class Main {
    public static void main(String[] args){
        SwitchControl switchControl = new SwitchControl();
        //通过电闸开启所有电器
        switchControl.turnOn();
        //通过电闸关闭所有电器
        switchControl.turnOff();
    }
}
总结

外观模式的优势在于,客户端不需要知道各子系统的实现细节,不需要操作子系统,降低了客户端与子系统的耦合。但是实际情况是,增加一个子系统,便要更改外观类,这样又增加了维护成本。

博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!

你可能感兴趣的:(Java设计模式(十):外观模式)