设计模式之外观模式Facade(结构型)
来源:互联网 发布:有关孙悟空的网络电影 编辑:程序博客网 时间:2024/05/16 07:58
1. 概述
外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。
2. 问题
为了降低复杂性,常常将系统划分为若干个子系统。但是如何做到各个系统之间的通信和相互依赖关系达到最小呢?
3. 解决方案
外观模式:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。
4. 优缺点
Facade模式有下面一些优点:
1)对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。2)实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。3)降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。4)只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。Facade模式的缺点1) 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。2) 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
5. 实现
- package design.service;
- /**
- * 文件名称:ServiceA.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public interface ServiceA {
- /**
- * ServiceA 的A方法
- * */
- public void methodA() ;
- }
- package design.service.impl;
- /**
- * 文件名称:ServiceAImpl.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public class ServiceAImpl implements ServiceA {
- /* (non-Javadoc)
- * @see design.facade.ServiceA#methodA()
- */
- @Override
- public void methodA() {
- System.out.println( "methodA--> is runing" );
- }
- }
- package design.service;
- /**
- * 文件名称:ServiceB.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public interface ServiceB {
- /**
- * ServiceB 的B方法
- * */
- public void methodB() ;
- }
- package design.service.impl;
- /**
- * 文件名称:ServiceAImpl.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public class ServiceBImpl implements ServiceB {
- /* (non-Javadoc)
- * @see design.facade.ServiceA#methodA()
- */
- @Override
- public void methodB() {
- System.out.println( "methodB--> is runing" );
- }
- }
- package design.service;
- /**
- * 文件名称:ServiceC.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public interface ServiceC {
- /**
- * ServiceC 的C方法
- * */
- public void methodC() ;
- }
- package design.service.impl;
- /**
- * 文件名称:ServiceAImpl.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public class ServiceCImpl implements ServiceC {
- /* (non-Javadoc)
- * @see design.facade.ServiceA#methodA()
- */
- @Override
- public void methodC() {
- System.out.println( "methodC--> is runing" );
- }
- }
- package design.facade;
- /**
- * 文件名称:Facade.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- *
- * 外观模式 核心类
- * */
- public class Facade {
- ServiceA sa;
- ServiceB sb;
- ServiceC sc;
- public Facade() {
- sa = new ServiceAImpl();
- sb = new ServiceBImpl();
- sc = new ServiceCImpl();
- }
- public void methodA() {
- sa.methodA();
- sb.methodB();
- }
- public void methodB() {
- sb.methodB();
- sc.methodC();
- }
- public void methodC() {
- sc.methodC();
- sa.methodA();
- }
- }
- package design.client;
- /**
- * 文件名称:Client.java
- * 创建人:Fei Wong
- * 创建时间: Jun 29, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public class Client {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Facade f = new Facade();
- f.methodA();
- f.methodB();
- f.methodC() ;
- }
- }
0 0
- 设计模式之外观(Facade)---对象结构型模式
- 设计模式之外观模式Facade(结构型)
- [设计模式-结构型]外观模式(Facade)
- 设计模式(结构型)之外观模式(Facade Pattern)
- 【设计模式】结构型模式之Facade外观
- 一天学习两个设计模式之Facade模式(外观模式,结构型模式)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式(3)-结构型-外观模式(Facade)
- *LeetCode-Letter Combinations of a Phone Number
- Android开发艺术探索读书笔记(二)
- 利用RunTrace实时跟踪分析iOS App视图
- UTF8与GBK间的转换
- 红黑树----红黑树插入和删除结点的全程演示
- 设计模式之外观模式Facade(结构型)
- 网站安全退出后,再点击浏览器后退按钮不能返回前一个页面的笨办法
- shell脚本学习 二
- mybatis二级缓存应用及与ehcache整合
- MPEG音频文件格式(包括MP3文件格式)(1)
- [Android] 混音线程MixerThread
- 面向对象第一次作业
- 从连续数字中寻找缺失的数字
- windows emacs以及常用plugin安装