结构模式:立面
Facade模式通过将复杂子系统封装在单个接口对象中来促进子系统与其可能的许多客户端的分离。这减少了子系统之间的通信和依赖性,并降低了系统的复杂性。
立面图案属于结构模式。
根据 Gamma等人的Design Patterns,这种模式的目的是 :
为子系统中的一组接口提供统一接口。Facade定义了一个更高级别的接口,使子系统更易于使用。
门面模式的结构
Facade使用更简单的界面包装复杂的子系统。下图显示了立面图案的结构。
图1:立面图案结构
在这里,所有的复杂性都被外立面包裹着。这是一个使用一个精心设计的API包装设计不佳的API集合的示例。
需要注意的一件重要事情是,可以有多个外观类。
这是另一个更实际的例子来说明立面图案。
图2:立面图案结构
在这里,参与者是:
Facade:facade类从应用程序的其余部分提取包1,2和3。
客户端:对象使用Facade Pattern从Packages访问资源。
例
让我们考虑一个制造汽车的系统。在创造一辆完整的汽车时,有许多复杂的工艺和零件。所有这些都可以包装在一个Facade类中,如下面的类图所示。
图3:汽车制造系统
Java实现
首先,让我们创建一个复杂的过程。
//系统的复杂部分
公共 类 CarBody {
public void setCarBody(){
系统。出。println(“Car body set。”);
}
}
公共 类 CarEngine {
public void setCarEngine(){
系统。出。println(“Car Engine is set。”);
}
}
公共 类 CarAccessories {
public void setCarAccessories(){
系统。出。println(“汽车配件已设定。”);
}
}
现在,让我们将这些复杂的流程包装到facade类中。
/ **
* Facade类包装复杂的部分
* /
公共 课 CarFacade {
私人 CarEngine 发动机 ;
私人 CarBody 身体 ;
私人 汽车 配件配件 ;
public CarFacade(){
这个。engine = new CarEngine();
这个。body = new CarBody();
这个。配件 = 新的 CarAccessories();
}
public void createCar(){
系统。出。println(“创造汽车......”);
发动机。setCarEngine();
身体。setCarBody();
配件。setCarAccessories();
系统。出。println(“你的车准备好了。”);
}
}
现在,客户可以使用这个外观来创建汽车,而无需了解潜在的复杂性。
/ **
*客户
* /
公共 类 申请 {
public static void main(String [] args){
CarFacade facade = new CarFacade();
门面。createCar();
}
}
该计划的输出是:
创造 一辆 车 ......
汽车 引擎 已 设定。
汽车 车身 的 设置。
汽车 配件 已 设定。
你的 车 是 准备就绪。
您可以看到客户如何不关心汽车的内部复杂性,而是关注汽车的行为。
结论
这篇文章用一个简单的例子谈到了Facade模式的概括形式,作为GOF模式之一。