这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
前言
最近同事二狗子要装修房子,他装修之前呢,得先找个设计师设计,然后还需要找个水电工给新房子改水电,再然后,还得找泥瓦工,刷墙贴瓷砖之类的,这个过程中要招人,谈价钱,跟进度,二狗子一个写代码的程序员,他哪会这些呀,太麻烦了,要是有人能帮他干就好了。
哎,这事儿好办呀,找个装修公司呀。
有了装修公司,二狗子就只需要和装修公司谈好价钱,然后等房子装修就好,不用再操心一些细节。
这和我们今天讲的门面设计模式是一个道理。
门面模式定义
GoF门面设计模式定义:为子系统中的一组接口提供统一的接口。门面模式定义了使子系统更易于使用的高级接口。
门面设计模式(Facade Design Pattern)是结构设计模式中的一种,门面模式的作用是为了帮助客户端更容易地与系统交互。
门面模式结构
我们来看一下,在上面的例子中,都需要有些什么元素。
子系统
在上面的例子中,我们首先需要有设计师,水电工,泥瓦匠这些功能对应的接口,供门面(装修公司)来使用。
设计师
1 | java复制代码/** |
水电工
1 | java复制代码/** |
泥瓦工
1 | java复制代码/** |
门面
然后我们建立一个门面类,也就是装修公司。
1 | java复制代码/** |
在我的同事二狗子就可以来进行装修了,我们来看一下二狗子使用门面和不使用门面的不同实现方式。
1 | java复制代码public class DecorationTest { |
如你所见,使用门面模式可以避免在客户端有大量的实现逻辑,客户端可以更简单清晰的使用服务。
使用门面模式要遵循以下特点。
- 门面设计模式更像是客户端应用程序的助手,它不会对客户端隐藏子系统接口,是否使用门面完全取决于客户端代码;
- 门面设计模式可以应用于开发的任何时刻,通常是在接口数量增加和系统变得复杂时;
- 子系统接口不知道门面,它们不应该有任何对门面接口的引用;
门面模式的优缺点
优点
- 松散耦合: 门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
- 简单易用: 门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。:门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
缺点
- 当增加子系统时可能带来未知风险;
- 门面不符合开闭原则;
门面模式与代理模式的区别
代理模式侧重于对原对象的访问控制;
代理模式会实现原对象的接口;
代理模式只代理一个接口;
门面模式更侧重于整合子系统资源;
门面模式和子系统对象具有不同的接口抽象;
门面模式代理的是一系列接口。
以上就是门面模式的内容,如果对你有所帮助,点赞是对我最大的鼓励!
本文转载自: 掘金