优点:
- 减少系统的相互依赖
- 提高安全性
缺点:
- 不符合开闭的原则
角色:
- Facade门面角色
- SubSystem子系统角色
应用场景:
- 为一个复杂的模块或子系统提供一个供外界访问的接口
- 子系统相对独立
- 预防低水平人员带来的风险扩散
Dormitory子系统
package com.memory.facade;
/**
* 宿舍管理
*
* @author Administrator
*
*/
public class Dormitory {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 入学
*/
public void in(){
System.out.println("新人"+name+"报道了,安排床位");
}
/**
* 毕业
*/
public void out(){
System.out.println("老人"+name+"离校,回收床位");
}
}
ClassGrade子系统
package com.memory.facade;
/**
* 班级管理
*
* @author Administrator
*
*/
public class ClassGrade {
/**
* 学生姓名
*/
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 入学
*/
public void in() {
System.out.println("新人"+name+"安排座位");
}
/**
* 毕业
*/
public void out() {
System.out.println("老人"+name+"离校,回收座位");
}
}
Facade门面角色
package com.memory.facade;
/**
* 门面角色
*
* @author Administrator
*
*/
public class Facade {
/**
* 班级管理子 系统
*/
ClassGrade mGrade = new ClassGrade();
/**
* 宿舍管理子系统
*/
Dormitory mDormitory = new Dormitory();
/**
* 入学
* @param name 学生姓名
*/
public void entrySchool(String name){
mGrade.setName(name);
mDormitory.setName(name);
mGrade.in();
mDormitory.in();
}
/**
* 离校
* @param name
*/
public void leaveSchool(String name){
mGrade.setName(name);
mDormitory.setName(name);
mGrade.out();
mDormitory.out();
}
}
测试
//门面/外观
Facade facade = new Facade();
facade.entrySchool("张三");
facade.leaveSchool("张三");
//输出
启动应用成功!开启美好的一天
新人张三安排座位
新人张三报道了,安排床位
老人张三离校,回收座位
老人张三离校,回收床位