Facade(外观模式/门面)
介绍
外观模式(Facade Pattern)隐藏系统的复杂性,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口。
这种类型的设计模式属于结构型模式,涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
优点:
- 解耦, 减少系统相互依赖
- 提高灵活性、安全性
缺点:
- 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适
注意事项:
- 在层次化结构中,可以使用外观模式定义系统中每一层的入口
实现
1、创建一个抽象类
public abstract class Company {
abstract void function();
}
2、 创建继承类的实体类
public class TechnicalDepartment extends Company{
@Override
void function() {
System.out.println("码代码.....");
}
}
public class FinancialDepartment extends Company{
@Override
void function() {
System.out.println("管理财务...");
}
}
3、 创建一个外观类
public class Receptionist {
private FinancialDepartment financialDepartment;
private TechnicalDepartment technicalDepartment;
public Receptionist() {
financialDepartment = new FinancialDepartment();
technicalDepartment = new TechnicalDepartment();
}
public void technicalDepartmentFunction () {
technicalDepartment.function();
}
public void financialDepartmentFunction () {
financialDepartment.function();
}
}
4、 使用该外观类去访问各部门
public class FacadeDemo {
public static void main(String[] args) {
Receptionist receptionist = new Receptionist();
receptionist.financialDepartmentFunction();
receptionist.technicalDepartmentFunction();
}
}