外观模式
概述
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式可以分为三大类,分别是创建型、结构型和行为型。
结构型
外观模式(Facade Pattern)
外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。
结构图
应用场景
为复杂的模块或者子系统提供外界访问的模块。子系统相对独立的场景。预防低水平人员带来的风险。Java中的日志框架slf4j就使用了外观模式,利于维护和各个类的日志处理系统的统一。
优点
减少系统相互依赖;提高灵活性;提高了安全性
缺点
不符合开放封闭原则,改东西很麻烦,继承重写都不合适。
代码
子系统类
public class SubSystemOne {
public void methodOne(){
System.out.println("子系统方法一");
}
}
public class SubSystemTwo {
public void methodTwo(){
System.out.println("子系统方法二");
}
}
public class SubSystemThree {
public void methodThree(){
System.out.println("子系统方法三");
}
}
外观类
public class Facade {
SubSystemOne subSystemOne;
SubSystemTwo subSystemTwo;
SubSystemThree subSystemThree;
public Facade(){
subSystemOne = new SubSystemOne();
subSystemTwo = new SubSystemTwo();
subSystemThree = new SubSystemThree();
}
public void methodA(){
System.out.println("方法组 A()---");
subSystemOne.methodOne();
subSystemTwo.methodTwo();
subSystemThree.methodThree();
}
public void methodB(){
System.out.println("方法组 B()---");
subSystemOne.methodOne();
subSystemTwo.methodTwo();
}
}
测试类
public class JavaDemo {
public static void main(String[] args){
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
运行结果如下
方法组 A()---
子系统方法一
子系统方法二
子系统方法三
方法组 B()---
子系统方法一
子系统方法二
注:
本文参考了书籍《大话设计模式》和菜鸟教程设计模式相关部分资料