设计模式总结篇系列:外观模式(Facade)

简介:

张三自从毕业后开始做软件开发,做着做着发现不爽了,钱赚不了太多,头发也白了。于是拿着一点小资本,想着做点小生意。瞅着眼前的餐饮行业还不错,于是打算开一家餐馆。开参观可不是一件容易的事,仅仅行政类的审批流程就不少。至少包括办理卫生许可证,办理税务登记,办理工商登记等。

我们先来看一下行政审批接口:

1 interface Executive{
2     
3     public void approve();
4     
5 }

卫生局类的定义:

复制代码
1 class HealthOffice implements Executive{
2 
3     @Override
4     public void approve() {
5         System.out.println("卫生局通过审批");
6     }
7     
8 }
复制代码

税务局类的定义:

复制代码
1 class RevenueOffice implements Executive{
2 
3     @Override
4     public void approve() {
5         System.out.println("税务局完成登记,定时回去收税");
6     }
7     
8 }
复制代码

工商局类的定义:

复制代码
1 class SaicOffice implements Executive{
2 
3     @Override
4     public void approve() {
5         System.out.println("工商局完成审核,办法营业执照");
6     }
7     
8 }
复制代码

好了,现在客户端需要上场了:

复制代码
 1 public class FacadeTest {
 2 
 3     public static void main(String[] args) {
 4         System.out.println("开始办理行政手续...");
 5 
 6         HealthOffice ho = new HealthOffice();
 7         RevenueOffice ro = new RevenueOffice();
 8         SaicOffice so = new SaicOffice();
 9 
10         ho.approve();
11         ro.approve();
12         so.approve();
13 
14         System.out.println("行政手续终于办完了");
15     }
16 
17 }
复制代码

当然,上面的各个方法不一定都是实现同一个接口的,只是在这个例子中巧合了下。

我们发现,对客户端而言,想要的最终目的和关心的是办理完开饭店的行政审批手续,如果以办理行政手续为一个子系统来看的话,我们发现,上面的设计中客户端直接与子系统内的多个模块进行了交互,对客户端而言,比较麻烦,使得客户端不能简单的使用系统功能,且随着子系统模块的变换客户端可能也需要随着变化。

我们可以通过外观模式来解决上述问题,外观模式的一般描述是:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一子系统更加容易被外部使用。

利用外观模式对上述类进行重定义。定义一个外观类:

复制代码
 1 class ApproveFacade {
 2 
 3     public ApproveFacade() {
 4 
 5     }
 6 
 7     public void wholeApprove() {
 8         new HealthOffice().approve();
 9         new RevenueOffice().approve();
10         new SaicOffice().approve();
11     }
12 
13 }
复制代码

客户端调用:

复制代码
 1 public class FacadeTest {
 2 
 3     public static void main(String[] args) {
 4         System.out.println("开始办理行政手续...");
 5 
 6         ApproveFacade af = new ApproveFacade();
 7         af.wholeApprove();
 8         
 9         System.out.println("行政手续终于办完了");
10     }
11 
12 }
复制代码

看,通过外观模式后客户端调用够简单了吧。

外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单地使用子系统。

外观模式的本质是:封装交互,简化调用。

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!
分类: 设计模式

本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3754251.html,如需转载请自行联系原作者
目录
相关文章
|
28天前
|
设计模式 存储 uml
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
27 1
|
3月前
|
设计模式
设计模式-外观模式
设计模式-外观模式
31 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——03外观模式
Golang设计模式——03外观模式
21 0
|
3月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
30 1
|
29天前
|
设计模式 uml
设计模式之外观模式
设计模式之外观模式
|
1月前
|
设计模式 应用服务中间件 智能硬件
【设计模式】外观模式
【设计模式】外观模式
|
3月前
|
设计模式 Java
聊聊Java设计模式-外观模式
外观(Facade)模式,又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问的模式。
35 1
聊聊Java设计模式-外观模式
|
3月前
|
设计模式
设计模式 | 门面模式 Facade
设计模式 | 门面模式 Facade
18 0
|
3月前
|
设计模式 前端开发 数据库
【设计模式】之外观模式
外观模式是一种简化复杂系统接口的设计模式,在前端开发中有着广泛的应用。它可以帮助我们封装复杂的子系统,并提供一个简单易用的接口给客户端。通过使用外观模式,我们可以提高代码的可维护性、可读性和扩展性。但是需要注意避免过度使用外观模式,以免造成不必要的性能问题。
41 1
|
4月前
|
设计模式
二十三种设计模式全面解析-解锁外观模式的神秘面纱:深入探讨外观模式的魔力
二十三种设计模式全面解析-解锁外观模式的神秘面纱:深入探讨外观模式的魔力