外观模式(Facade Pattern):提供一个统一的接口,来访问子系统中一群功能的相关接口,外观模式定义一个高层接口,让子系统更容易使用,同时也使得客户端与子系统之间解耦。
举个简单的例子,一个家庭影院,有DVD和爆米花机两个家电,这两个家电都有自己的开关控制运作,而现在家庭影院需要为了用户更好的体验,用一个统一的遥控器来控制这两个家电,这就是外观模式
下面通过一段代码来做一个简单的演示,以便更好的理解。
1、爆米花机类(单例模式)
public class PopCorn { private PopCorn() { } private static class Inner{ private static PopCorn instance = new PopCorn(); } public static PopCorn getIns() { return Inner.instance; } public void on() { System.out.println("打开爆米花机"); } public void off() { System.out.println("关闭爆米花机"); } public void pop() { System.out.println("制作爆米花"); } }2、DVD机(单例模式)
public class DVD { private DVD() { } private static class Inner{ private static final DVD instance = new DVD(); } public static final DVD getIns() { return Inner.instance; } public void on() { System.out.println("打开DVD"); } public void off() { System.out.println("关闭DVD"); } public void play() { System.out.println("播放DVD"); } public void pause() { System.out.println("暂停DVD"); } }
3、家庭影院遥控器
public class HomeTheate { private PopCorn popCorn; private DVD dvd; public HomeTheate() { this.popCorn = PopCorn.getIns(); this.dvd = DVD.getIns(); } public void ready() { popCorn.on(); dvd.on(); } public void end() { popCorn.off(); dvd.off(); } public void play() { dvd.play(); } public void pause() { dvd.pause(); } }
外观模式很好理解,就是相当于根据需要把子系统的各个方法合并在一个方法中调用,成为一个新的方法,使得客户端不直接与子系统关联,实现解耦。