先举例子:你去医院看病,普通的流程为挂号,看病,拿药,打针等等一系列步骤,如果说看病的窗口挪了一下,那你的路程也要改变,这就违反了开闭原则,所以有了外观模式,对外有一个统一的接口,类似于你进医院把你的症状告诉那个人,他会替你去挂号看病拿药等等,你只需要等他的反馈。先来看例子
挂号
public class PartA { public void work(){ System.out.println("挂号"); } }
看病
public class PartB { public void work(){ System.out.println("看病"); } }
拿药
public class PartC { public void work(){ System.out.println("拿药"); } }
外观者
public class Facer { private PartA A=new PartA(); private PartB B=new PartB(); private PartC C=new PartC(); public void work(){ A.work(); B.work(); C.work(); } }
测试类
public class Peoson { public static void main(String[] args) { new Facer().work(); } }
总结:可以这么理解,外观者封装了具体的细节,我们只需要调用外观者,外观者对外修改时关闭的,满足了开闭原则,我们只需要把一系列任务交给外观者,需要使用的时候调用外观者对象就可以了。
应用场景:当一个系统很复杂,有很多子系统时使用外观模式对台提供一个接口访问,或者当客户端于多个子系统耦合度很高时使用外观模式将他们分离,在功能需要删减的时候只需要取消对用的外观者调用可以,从而提高子系统的独立性。