设计模式之门面模式(外观模式)
门面模式
- 概念
- 何时使用
- 类图
- 代码实例
概念
当类A和多个类交互时,并且调用其方法很乱时,为了降低类之间的耦合性,符合迪米特最少知识法则,专门抽出一个类,并且提供出几个简单明了的接口给A类,那么具体的复杂方法调用交给此类进行管理,该类就是为门面类。
何时使用
在开发的时候,我们采用分层思想,控制层、逻辑层、持久层。每层之间使用门面类进行交互。 还有就是在开发过程中,使用各种设计模式导致有很多很小的类,这个时候为了降低类的耦合度,专门提供Facade提供一个简单接口。
当我们接触到很复杂的老系统,我们又不想去重构,但是有些功能现在必须要使用的,使用门面模式也很合适。提供一个简单的接口给新系统使用,让这个Facade和老系统交互所有复杂工作。
类图
代码实例
Facade 门面类
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description 门面类
**/
public class Facade {
private SubSystem1 subSystem1;
private SubSystem2 subSystem2;
private SubSystem3 subSystem3;
private SubSystem4 subSystem4;
private SubSystem5 subSystem5;
private SubSystem6 subSystem6;
public Facade(){
subSystem1 = new SubSystem1();
subSystem2 = new SubSystem2();
subSystem3 = new SubSystem3();
subSystem4 = new SubSystem4();
subSystem5 = new SubSystem5();
subSystem6 = new SubSystem6();
}
public void methodA(){
subSystem1.m1();
subSystem3.m3();
subSystem5.m5();
}
public void methodB(){
subSystem2.m2();
subSystem4.m4();
subSystem6.m6();
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem1 {
public void m1(){
System.out.println("SubSystem1 m1");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem2 {
public void m2(){
System.out.println("SubSystem2 m2");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem3 {
public void m3(){
System.out.println("SubSystem3 m3");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem4 {
public void m4(){
System.out.println("SubSystem4 m4");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem5 {
public void m5(){
System.out.println("SubSystem5 m5");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class SubSystem6 {
public void m6(){
System.out.println("SubSystem6 m6");
}
}
/**
* @author duanyimiao
* @create 2018-09-26 10:19 AM
* @description
**/
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
输出结果
SubSystem1 m1
SubSystem3 m3
SubSystem5 m5
SubSystem2 m2
SubSystem4 m4
SubSystem6 m6