结构型模式-外观模式

上传人:第*** 文档编号:49584114 上传时间:2018-07-31 格式:PPTX 页数:28 大小:640.76KB
返回 下载 相关 举报
结构型模式-外观模式_第1页
第1页 / 共28页
结构型模式-外观模式_第2页
第2页 / 共28页
结构型模式-外观模式_第3页
第3页 / 共28页
结构型模式-外观模式_第4页
第4页 / 共28页
结构型模式-外观模式_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《结构型模式-外观模式》由会员分享,可在线阅读,更多相关《结构型模式-外观模式(28页珍藏版)》请在金锄头文库上搜索。

1、结构型模式-外观模式本章教学内容n外观模式 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展外观模式n模式动机外观模式n模式动机引入外观角色之后,用户只需要直接与外观角色交互,用户与子 系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合 度。外观模式n模式定义外观模式(Facade Pattern):外部与一个子系统 的通信必须通过一个统一的外观对象进行,为 子系统中的一组接口提供一个一致的界面,外 观模式定义了一个高层接口,这个接口使得这 一子系统更加容易使用。外观模式又称为门面 模式,它是一种对象结构型模式。外观模式n模式定义Facade Pattern: P

2、rovide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. Frequency of use: high外观模式n模式结构外观模式n模式结构外观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色外观模式n模式分析根据“单一职责原则”,在软件中将一个系统划分为若干个子系统 有利于降低整个系统的复杂性,一个常见的设计目标是使子系统 间的通信和相互依

3、赖关系达到最小,而达到该目标的途径之一就 是引入一个外观对象,它为子系统的访问提供了一个简单而单一 的入口。外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可 以降低原有系统的复杂度,同时降低客户类与子系统类的耦合 度。外观模式n模式分析外观模式要求一个子系统的外部与其内部的通信通过一个统一的 外观对象进行,外观类将客户端与子系统的内部复杂性分隔开, 使得客户端只需要与外观对象打交道,而不需要与子系统内部的 很多对象打交道。外观模式的目的在于降低系统的复杂程度。外观模式从很大程度上提高了客户端使用的便捷性,使得客户端 无须关心子系统的工作细节,通过外观角色即可调用相关功能。 外观模式n

4、模式分析典型的外观角色代码:public class Facadeprivate SubSystemA obj1 = new SubSystemA();private SubSystemB obj2 = new SubSystemB();private SubSystemC obj3 = new SubSystemC();public void method()obj1.method();obj2.method();obj3.method(); 外观模式n外观模式实例与解析实例一:电源总开关现在考察一个电源总开关的例子,以便进一步说明 外观模式。为了使用方便,一个电源总开关可以控 制四盏灯、一

5、个风扇、一台空调和一台电视机的启 动和关闭。通过该电源总开关可以同时控制上述所 有电器设备,使用外观模式设计该系统。外观模式n外观模式实例与解析实例一:电源总开关外观模式n外观模式实例与解析实例二:文件加密某系统需要提供一个文件加密模块,加密流程包括 三个操作,分别是读取源文件、加密、保存加密之 后的文件。读取文件和保存文件使用流来实现,这 三个操作相对独立,其业务代码封装在三个不同的 类中。现在需要提供一个统一的加密外观类,用户 可以直接使用该加密外观类完成文件的读取、加密 和保存三个操作,而不需要与每一个类进行交互, 使用外观模式设计该加密模块。外观模式n外观模式实例与解析实例二:文件加密

6、外观模式n模式优缺点外观模式的优点对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使 用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之 关联的对象也很少。实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不 会影响到调用它的客户类,只需要调整外观类即可。降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间 的移植过程,因为编译一个子系统一般不需要编译所有其他的子系 统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部 变化也不会影响到外观对象。只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系 统类。外观模式n模式优缺点外观模式的缺点不能

7、很好地限制客户使用子系统类,如果对客户访 问子系统类做太多的限制则减少了可变性和灵活 性。在不引入抽象外观类的情况下,增加新的子系统可 能需要修改外观类或客户端的源代码,违背了“开闭 原则”。外观模式n模式适用环境在以下情况下可以使用外观模式:当要为一个复杂子系统提供一个简单接口时可以使用 外观模式。该接口可以满足大多数用户的需求,而且 用户也可以越过外观类直接访问子系统。客户程序与多个子系统之间存在很大的依赖性。引入 外观类将子系统与客户以及其他子系统解耦,可以提 高子系统的独立性和可移植性。在层次化结构中,可以使用外观模式定义系统中每一 层的入口,层与层之间不直接产生联系,而通过外观 类建

8、立联系,降低层之间的耦合度。外观模式n模式应用(1) 外观模式应用于JDBC数据库操作 public class JDBCFacade private Connection conn=null;private Statement statement=null;public void open(String driver,String jdbcUrl,String userName,String userPwd) public int executeUpdate(String sql) public ResultSet executeQuery(String sql) public void c

9、lose() 外观模式n模式应用(2) Session外观模式是外观模式在Java EE框架中的应用。 外观模式n模式扩展一个系统有多个外观类在外观模式中,通常只需要一个外观类,并且此外 观类只有一个实例,换言之它是一个单例类。在很 多情况下为了节约系统资源,一般将外观类设计为 单例类。当然这并不意味着在整个系统里只能有一 个外观类,在一个系统中可以设计多个外观类,每 个外观类都负责和一些特定的子系统交互,向用户 提供相应的业务功能。外观模式n模式扩展不要试图通过外观类为子系统增加新行为 不要通过继承一个外观类在子系统中加入新的行为 ,这种做法是错误的。外观模式的用意是为子系统 提供一个集中化

10、和简化的沟通渠道,而不是向子系 统加入新的行为,新的行为的增加应该通过修改原 有子系统类或增加新的子系统类来实现,不能通过 外观类来实现。外观模式n模式扩展外观模式与迪米特法则 外观模式创造出一个外观对象,将客户端所涉及的 属于一个子系统的协作伙伴的数量减到最少,使得 客户端与子系统内部的对象的相互作用被外观对象 所取代。外观类充当了客户类与子系统类之间的“第 三者”,降低了客户类与子系统类之间的耦合度,外 观模式就是实现代码重构以便达到“迪米特法则”要 求的一个强有力的武器。外观模式n模式扩展抽象外观类的引入 外观模式最大的缺点在于违背了“开闭原则”,当增 加新的子系统或者移除子系统时需要修

11、改外观类, 可以通过引入抽象外观类在一定程度上解决该问题 ,客户端针对抽象外观类进行编程。对于新的业务 需求,不修改原有外观类,而对应增加一个新的具 体外观类,由新的具体外观类来关联新的子系统对 象,同时通过修改配置文件来达到不修改源代码并 更换外观类的目的。 外观模式n模式扩展抽象外观类的引入 本章小结n在外观模式中,外部与一个子系统的通信必须通过一个统一的外观对 象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义 了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式 又称为门面模式,它是一种对象结构型模式。n外观模式包含两个角色:外观角色是在客户端直接调用的角色,在外 观

12、角色中可以知道相关的(一个或者多个)子系统的功能和责任,它将所 有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统 对象处理;在软件系统中可以同时有一个或者多个子系统角色,每一 个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统 的功能。n外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观 对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户 端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交 道。本章小结n外观模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对 象数目并使得子系统使用起来更加容易,它实现了子系统与客户之间 的松耦合关系,并降低了大型软件系统中的编译依赖性,简化了系统 在不同平台之间的移植过程;其缺点在于不能很好地限制客户使用子 系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需 要修改外观类或客户端的源代码,违背了“开闭原则”。n外观模式适用情况包括:要为一个复杂子系统提供一个简单接口;客 户程序与多个子系统之间存在很大的依赖性;在层次化结构中,需要 定义系统中每一层的入口,使得层与层之间不直接产生联系。ENDEND

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号