结构类模式(五):外观(Facade)

定义

为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

UML

优点

  1. 对客户屏蔽了其子系统组件,因而减少了客户处理对象的数目,并使得子系统实用起来更方便。
  2. 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。 Facade模式还可以消除复杂的循环依赖关系,这一点在客户程序与子系统是分别实现的时候尤为重要。
  3. 如果应用需要,它并不限制它们实用子系统类。因此你可以在系统易用性和通用性之间进行选择。

缺点

  1. 限制了客户的自由,减少了可变性。

应用场景

  1. 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
  2. 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
  3. 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

示例

假设我们的项目中有一个代码生成工具,用来生成供前后端使用的代码,客户端在调用时需要先加载配置文件,然后再依次生成前后端的代码文件,这个顺序不能乱掉。我们如果直接提供每个小模块的代码给到客户端,那么当系统变得复杂时,调用会变得非常麻烦。这时如果提供一个外观类来管理所有的小模块,在给到客户端调用就会变得非常的方便了。

Java

 1 public class Main
 2 {
 3     public static void main(String[] args)
 4     {
 5         //使用外观模式可以方便的调用来生成代码
 6         new Facade().generate();
 7     }
 8 
 9     /**
10      * 代码生成配置类
11      */
12     public static class GenerateConfig
13     {
14         public void readConfig()
15         {
16             System.out.println("读取代码生成配置表");
17         }
18     }
19 
20     /**
21      * 生成客户端代码类
22      */
23     public static class GenerateClientCode
24     {
25         public void generate()
26         {
27             System.out.println("生成客户端代码");
28         }
29     }
30 
31     /**
32      * 生成服务端代码类
33      */
34     public static class GenerateServerCode
35     {
36         public void generate()
37         {
38             System.out.println("生成服务端代码");
39         }
40     }
41 
42     /**
43      * 代码生成外观模式
44      */
45     public static class Facade
46     {
47         public void generate()
48         {
49             new GenerateConfig().readConfig();
50             new GenerateClientCode().generate();
51             new GenerateServerCode().generate();
52         }
53     }
54 }
View Code

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值