结构模式:立面

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值