Java 设计模式之外观模式
一、定义
外观模式又称门面模式,是一种通过多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式,该模式对外有一个统一接口,外部不用关心子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
主要角色:
外观角色:为多个子系统对外提供一个共同的接口。
子系统:实现系统的部分功能,客户可以通过外观角色访问它。
二、代码实现
举例:比如我每天下班回家都要开灯,打开电视,打开空调,但是这个过程我需要三步才能完成,所以我买了一个小爱同学,由小爱同学来帮我打开灯电视空调。其中灯,电视,空调就是指子系统,小爱同学指外观角色,接下来看代码;
灯(子系统)
public class Light { public void open(){ System.out.println("打开了灯"); } }
电视(子系统)
public class Tv { public void open(){ System.out.println("打开了电视"); } }
空调(子系统)
public class AirCondition { public void open(){ System.out.println("打开了空调"); } }
小爱同学(外观角色)
public class XiaoAi { private Light light; private Tv tv; private AirCondition airCondition; public void open(){ light = new Light(); light.open(); tv = new Tv(); tv.open(); airCondition = new AirCondition(); airCondition.open(); } }
使用:
public static void main(String[] args) { XiaoAi xiaoai = new XiaoAi(); xiaoai.open(); }
输出:
打开了灯 打开了电视 打开了空调
外观模式降低了子系统与客户端之间的耦合度,使子系统的变化不会影响到调用它的客户类,对客户屏蔽了子系统组件,减少了客户端处理的对象数目,缺点是不符合开闭原则,修改很麻烦。当一个复杂的系统中子系统很多时,即可通过外观模式设计一个简单的接口供客户端访问。