博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式总结篇系列:外观模式(Facade)
阅读量:6681 次
发布时间:2019-06-25

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

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

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

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

卫生局类的定义:

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

税务局类的定义:

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

工商局类的定义:

1 class SaicOffice implements Executive{2 3     @Override4     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 }

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

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

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

 

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

你可能感兴趣的文章
更改matlab默认工作路径
查看>>
JavaScript 书籍推荐(转)
查看>>
Adobe:彻底解决Firefox与Flash插件卡顿
查看>>
凡客和锤子
查看>>
设计模式(5)--单例模式
查看>>
pitch yaw roll是什么
查看>>
深浅copy
查看>>
Hibernate之一级缓存
查看>>
Python基础之定义有默认参数的函数
查看>>
iOS5中的UUID
查看>>
(转载)XML Tutorial for iOS: How To Read and Write XML Documents with GDataXML
查看>>
poj 3259 Wormholes
查看>>
py学习之道
查看>>
o(1)复杂度之双边滤波算法的原理、流程、实现及效果。
查看>>
python中requests模块使用
查看>>
git bash 常用命令 新手学习
查看>>
最短路径
查看>>
POJ题目(转)
查看>>
day28 classmethod 装饰器
查看>>
QName
查看>>