0
点赞
收藏
分享

微信扫一扫

结构模式:立面


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模式之一。 

举报

相关推荐

0 条评论