1、面向对象设计模式,第六章 结构型模式(三),本章知识点,外观(Facade)模式代理(Proxy)模式,1、外观(Facade)模式,外观(Facade)模式系统的复杂度假设我们开发一个坦克模拟系统用于模拟坦克在各种不同的作战 环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子 系统构成。如何设计这样的系统A方案 B方案,1、外观(Facade)模式,外观(Facade)模式,1、外观(Facade)模式,外观(Facade)模式动机上述A方案的问题在于组件的客户和组件中各种复杂的子系统有 了过多的耦合,随着外部客户程序和子系统的演化,这种过多的耦 合面临很多变化的挑战。如何简化外部客
2、户程序和系统间的交互接口?如何将外部客户程 序的演化和内部子系统的变化之间的依赖相互解耦?,1、外观(Facade)模式,外观(Facade)模式意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了 一个高层接口,这个接口使得这一子系统更加容易使用。 设计模式GoF,1、外观(Facade)模式,外观(Facade)模式外观(Facade)模式的UML结构图如下:,1、外观(Facade)模式,外观(Facade)模式外观(Facade)模式的几个要点: 1.从客户程序的角度看, Facade模式不仅简化了整个组件系统的接 口,同时对于组件内部与外部客户程序来说,从某中程度上也达
3、到 了一种“解耦”的效果内部子程序的任何变化都不会影响到Facade 接口的变化。 2. Facade模式更注重从架构的层次上看待系统,而不是单个类的层 次。 Facade模式更是多的时候一种架构设计模式。,2、代理(Proxy)模式,代理(Proxy)模式直接与间接人们对于复杂软件系 统往往有一种处理手 法,即增加一层中间 层,从而对系统获得一 种更为灵活,满足特定 需求的解决方案。,2、代理(Proxy)模式,代理(Proxy)模式动机在面向对象系统中,有些对象由于某些原因(比如对象 创建的开销很大,或者某些操作需要安全控制,或者需要 进程外的访问等),直接访问会给使用者或者系统结构带 来
4、很多麻烦。如何在不失去透明操作对象的同时带来管理/控制这些 对象特有的复杂性?增加一层间接层是软件开发中常见的 解决方式。,2、代理(Proxy)模式,代理(Proxy)模式意图为其它对象提供一种代理以控制对这个对象的访问。设计模式GoF代理模式可以分为两种: 静态代理 动态代理,2、代理(Proxy)模式,代理(Proxy)模式代理模式的UML结构图如下:,2、代理(Proxy)模式,代理(Proxy)模式使用代理(Proxy)模式的几个要点:1.“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中,直接使用某些对象有时候会带来很多问题,作为间接层的Proxy对象是解决这一问题的常见手段。2.Proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损失一些透明性也是可以接受的。,小结,Facade模式注重简化接口,简化组件系统与外部客户程序的依赖关系。Proxy模式增加间接层来实现灵活控制。,