博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构类模式(五):外观(Facade)
阅读量:5825 次
发布时间:2019-06-18

本文共 1691 字,大约阅读时间需要 5 分钟。

定义

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

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 GenerateConfig13     {14         public void readConfig()15         {16             System.out.println("读取代码生成配置表");17         }18     }19 20     /**21      * 生成客户端代码类22      */23     public static class GenerateClientCode24     {25         public void generate()26         {27             System.out.println("生成客户端代码");28         }29     }30 31     /**32      * 生成服务端代码类33      */34     public static class GenerateServerCode35     {36         public void generate()37         {38             System.out.println("生成服务端代码");39         }40     }41 42     /**43      * 代码生成外观模式44      */45     public static class Facade46     {47         public void generate()48         {49             new GenerateConfig().readConfig();50             new GenerateClientCode().generate();51             new GenerateServerCode().generate();52         }53     }54 }
View Code

 

转载地址:http://khidx.baihongyu.com/

你可能感兴趣的文章
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>
【ERP】如何在多行数据块中实现仅能勾选唯一的主联系人
查看>>
Oracle 数据库优化的R方法(Method R)
查看>>
CentOS最小化安装系统开启网卡
查看>>
互联网+升级到智能+ 开启万物智联新时代
查看>>
Linux文本编辑器之Nano
查看>>
【原】IOS中KVO模式的解析与应用
查看>>
理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
查看>>
[MFC] CList
查看>>
[Android Pro] 完美Android Cursor使用例子(Android数据库操作)
查看>>
c++中sizeof的分析
查看>>
线程间操作无效: 从不是创建控件的线程访问它的解决方法
查看>>
hdu 1236 排名
查看>>
PHP面向对象深入研究之【继承】,减少代码重复
查看>>
RBAC权限管理
查看>>
此博客不再发表对自己私事的看法
查看>>
后台(20)——数据库连接池
查看>>
导致Asp.Net站点重启的10个原因
查看>>
【PMP】Head First PMP 学习笔记 第一章 引言
查看>>