定义
门面模式(Facade Pattern)也叫做外观模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
角色
- 门面角色:有多个功能方法,每个功能方法中组装小模块的功能方法。
- 子系统角色:更像是若干个小模块,每个小模块有自己的功能方法。
- 客户角色:门面角色中功能方法的使用者, 看不到子系统角色中的小模块的代码。
优点
- 减少了客户与子系统的依赖。
- 更好的划分了层级。
- 提高了安全性。
示例
子系统角色
/**
* 自行车部件
*/
public class BicycleParts {
/**
* 前轮
*/
static class frontWheel{
public static void lift(){
System.out.println("前轮抬起");
}
public static void touchDown(){
System.out.println("前轮着地");
}
}
/**
* 后轮
*/
static class rearWheel{
public static void lift(){
System.out.println("后轮抬起");
}
public static void touchDown(){
System.out.println("后轮着地");
}
}
}
门面角色
/**
* 自行车特技
*/
public class BicycleStunt {
public static void stuntA(){
System.out.println("特技A");
BicycleParts.frontWheel.lift();
BicycleParts.rearWheel.touchDown();
}
public static void stuntB(){
System.out.println("特技B");
BicycleParts.frontWheel.touchDown();
BicycleParts.rearWheel.lift();
}
public static void normalDriving(){
System.out.println("正常行驶");
BicycleParts.frontWheel.touchDown();
BicycleParts.rearWheel.touchDown();
}
}
客户角色
public class test3 {
public static void main(String[] arg) {
BicycleStunt.stuntA();
System.out.println("----------------------------------");
BicycleStunt.stuntB();
System.out.println("----------------------------------");
BicycleStunt.normalDriving();
System.out.println("----------------------------------");
}
}
特技A
前轮抬起
后轮着地
----------------------------------
特技B
前轮着地
后轮抬起
----------------------------------
正常行驶
前轮着地
后轮着地
----------------------------------
Process finished with exit code 0