设计模式(12)-----外观模式
Posted 韩思明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式(12)-----外观模式相关的知识,希望对你有一定的参考价值。
外观模式(Facade)
定义
模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。
UML图
例子
方法A
package com.csdhsm.pattemdesign.facade; /** * @Title: ServiceA.java * @Description: 方法A * @author: Han * @date: 2016年6月22日 下午8:22:33 */ public class ServiceA { public void methodA() { System.out.println("ServiceA === > MethodA"); } }
方法B
package com.csdhsm.pattemdesign.facade; /** * @Title: ServiceB.java * @Description: 方法B * @author: Han * @date: 2016年6月22日 下午8:25:03 */ public class ServiceB { public void methodB() { System.out.println("ServiceB === > MethodB"); } }
方法C
package com.csdhsm.pattemdesign.facade; /** * @Title: ServiceC.java * @Description: 方法C * @author: Han * @date: 2016年6月22日 下午8:25:29 */ public class ServiceC { public void methodC() { System.out.println("ServiceC === > MethodC"); } }
外观模式核心类
package com.csdhsm.pattemdesign.facade; /** * @Title: Facade.java * @Description: 外观模式 核心类 * @author: Han * @date: 2016年6月22日 下午8:26:09 */ public class Facade { private ServiceA a; private ServiceB b; private ServiceC c; public Facade() { a = new ServiceA(); b = new ServiceB(); c = new ServiceC(); } //方法A public void methodA() { a.methodA(); b.methodB(); } //方法B public void methodB() { b.methodB(); c.methodC(); } }
客户端
package com.csdhsm.pattemdesign.facade; public class Solution { public static void main(String[] args) { Facade facade = new Facade(); facade.methodA(); facade.methodB(); } }
结果
OK,成功
总结
在遇到以下情况使用Facade模式:
1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3、当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点,如果子系统之间是相互依赖的,你可以让它们仅通过Facade 进行通讯,从而简化了它们之间的依赖关系。
以上是关于设计模式(12)-----外观模式的主要内容,如果未能解决你的问题,请参考以下文章