Facade(门面模式)
参考文章
https://baijiahao.baidu.com/s?id=1636109114016642554&wfr=spider&for=pc
个人感觉讲的很透彻
理解
门面模式又叫外观模式
开发部门 有部门经理 后端开发 前端开发
测试部门 有部门经理 性能测试 功能测试
设计部门 有部门经理 原型设计 视觉设计
其中各个部门的经理都是部门的门面
优点
- (子系统)部门人员可以有选择的暴露能力(方法)
- 一个门面模式可以有很多门面模式类(可以有很多部门)
- 与客户之间松耦合(客户不用关心这件事到底谁来做)
缺点
不符合开闭原则。所谓的开闭原则是软件工程里面一个最基本的原则:对扩展开放,对修改关闭。换句话说,你的系统可以提供新的功能模块而不必进行修改。
与代理模式的区别
这个模式乍一看还真的很像代理模式,其实还是有很大的区别的。
比如说他们都引入了中介,起到了代理的功能。但是代理模式只代理一个类,而且代理类与原类实现相同的抽象。门面类就不一样了,他代理的是一系列类,与子系统可以有不同的抽象。
代码
package facade;
// 员工类
public interface employee {
void work();
}
package facade;
public class AEmployee implements employee{
@Override
public void work() {
System.out.println("程序员A 开始构建平台架构。。。。。");
}
public void js() {
System.out.println("程序员A 开始写js。。。。。");
}
}
package facade;
public class BEmployee implements employee{
@Override
public void work() {
System.out.println("程序员B开始写页面。。。。。。。。。。。。。");
}
public void html() {
System.out.println("程序员B开始写html。。。。。。。。。。。。。");
}
}
package facade;
public class CEmployee implements employee {
@Override
public void work() {
System.out.println("程序员C开始写支付模块。。。。。");
}
public void my() {
System.out.println("程序员C开始摸鱼。。。。。");
}
}
package facade;
public class DepDepartment implements employee{
AEmployee aEmployee = new AEmployee();
BEmployee bEmployee = new BEmployee();
CEmployee cEmployee = new CEmployee();
@Override
public void work() {
System.out.println("研发经理积极协调部门内部的工作。。。。。。。。。。。。");
}
public void Awork(){
aEmployee.work();
aEmployee.js();
}
public void Bwork(){
bEmployee.work();
bEmployee.html();
}
public void Cwork(){
cEmployee.work();
cEmployee.my();
}
}
package facade;
public class Main {
public static void main(String[] args) {
// DepDepartment 就像等于门面
DepDepartment depDepartment = new DepDepartment();
depDepartment.Awork();
depDepartment.Bwork();
depDepartment.work();
depDepartment.Cwork();
}
}