设计模式10_门面模式
来源:互联网 发布:交叉熵 圣经网络 编辑:程序博客网 时间:2024/05/29 04:24
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/52050069
1、定义
门面模式是对象的结构模式,它提供一个高层次的接口,使得子系统更易于使用。
2、说明
对于web系统或app而言,其中包含各种不同的业务方法,以提供不同的服务,而不同业务之间可能会彼此进行调用。这样,可能会在一个业务方法中注入多个其它的业务方法,一旦新增的业务与之相关就会对其注入新的业务方法,显然,各种业务方法耦合在一起了。
针对上述情况,如果使用门面模式,将所有的业务方法都注入到门面类中,而某一个业务方法要使用其它业务方法,只需要注入门面类即可。这样就将各种不同的业务方法独立开来,互不耦合。
通常情况下,门面模式的使用场景大致有:(1)为复杂的模块、子系统提供外界访问的模块。(2)子系统相对独立。(3)在层次化结构中,可以使用外观模式定义系统中每一层的入口。
3、角色
子系统角色:实现各个子系统的功能。门面角色和客户角色对其是透明的,它没有任何的信息和链接。
门面角色:门面模式的核心。它被客户角色调用,其熟悉子系统的功能,且其内部根据客户角色的各种需求提供了不同的方法。
客户角色:调用门面角色来实现所需的功能。
4、类图
5、示例
子模块01:起床
package headfirst.design.facade;public class SubjectA { public void getUp() { System.err.println("起床。。。"); }}
子模块02:洗漱
package headfirst.design.facade;public class SubjectB { public void washing() { System.err.println("洗漱。。。"); }}
子模块03:吃饭
package headfirst.design.facade;public class SubjectC { public void eating() { System.err.println("吃饭。。。"); }}
子模块04:上班
package headfirst.design.facade;public class SubjectD { public void working() { System.err.println("上班。。。"); }}
门面类:
package headfirst.design.facade;public class Facade { public void test(){ testA(); testB(); testC(); testD(); } public void testA() { SubjectA subjectA = new SubjectA(); subjectA.getUp(); } public void testB() { SubjectB subjectB = new SubjectB(); subjectB.washing(); } public void testC() { SubjectC subjectC = new SubjectC(); subjectC.eating(); } public void testD() { SubjectD subjectD = new SubjectD(); subjectD.working(); }}
测试:
package headfirst.design.facade;public class Main { public static void main(String[] args) { Facade facade = new Facade(); //facade.test(); facade.testA(); facade.testB(); facade.testC(); facade.testD(); }}
运行结果:
起床。。。洗漱。。。吃饭。。。上班。。。
6、总结
门面模式将一些复杂的操作封装起来,以一个简单的接口提供给客户端。其可以定义多个子系统,但是层次之间的粗细粒度需要把握好。
优点:(1)松散耦合。门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。(2)简单易用。门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。(3)更好的划分访问层次。通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
缺点:不符合开闭原则。即对扩展开放,对修改关闭。当系统可以提供新的功能模块时,需要进行相应修改。
本文只是简单介绍了门面模式,并未对其进行深入探讨,略显粗糙。希望本文对你有所帮助。
- 设计模式10_门面模式
- 设计模式_门面模式
- 设计模式_门面模式
- 设计模式-门面模式
- 设计模式--门面模式
- 设计模式--门面模式
- 设计模式----门面模式
- 设计模式:门面模式
- 设计模式:门面模式
- 设计模式,门面模式
- 设计模式 门面模式
- 设计模式-----门面模式
- 设计模式:门面模式
- 设计模式--门面模式
- 设计模式-门面模式
- 设计模式-门面模式
- 《设计模式》-- 门面模式
- 设计模式--门面模式
- LeetCode进阶之路(Reverse Nodes in k-Group)
- Java中的基本数据类型
- JAVA(七)java面向对象1-面向对象的概念,类与对象
- 算法竞赛入门经典3.3 数数字UVa1225
- (22)HTML标签详解之<img><map><area>
- 设计模式10_门面模式
- Mac 升级到El Capitan或者Yosemite出现用户级目录404 NOT FOUND的解决方案
- leetcode题解日练--2016.7.27
- Java第三天
- 剑指offer——丑数
- [CF Gym 100827F] Knights [2014-2015 ACM-ICPC Pacific Northwest Regional Contest F]
- 物联网开发的生命周期模型
- 关于新导入java项目后提示:Configure build path
- linux简单常用命令及个人总结