10 第10章 结构型模式.ppt

上传人:s****8 文档编号:82769164 上传时间:2023-03-26 格式:PPT 页数:114 大小:5.38MB
返回 下载 相关 举报
10 第10章 结构型模式.ppt_第1页
第1页 / 共114页
10 第10章 结构型模式.ppt_第2页
第2页 / 共114页
点击查看更多>>
资源描述

《10 第10章 结构型模式.ppt》由会员分享,可在线阅读,更多相关《10 第10章 结构型模式.ppt(114页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第1010章章结构型模式结构型模式Sunny Liuweiliu_教学内容w结构型模式w适配器模式w组合模式w外观模式w代理模式结构型模式w结构型模式概述 结构型模式结构型模式(Structural Pattern)描述描述如何将类或者对如何将类或者对象结合在一起形成更大的结构象结合在一起形成更大的结构,就像搭积木,可以通过,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。简单积木的组合形成复杂的、功能更为强大的结构。结构型模式w结构型模式概述根据这一点,结构型模式可以分为根据这一点,结构型模式可以分为类结构型模式类结构型模式和和对象对象结构型模式结构型模式:类结构型模式关

2、心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。结构型模式w结构型模式简介 适配器模式适配器模式(Adapter)桥接模式桥接模式(Bridge)组合模式组合模式(Composite)装饰模式装饰模式(Decorator)外观模式外观模式(Facade)享元模式享元模式(Flyweight)代理模式代理模式(Proxy)适配器模式w模式动机适

3、配器模式w模式动机在软件开发中采用类似于电源适配器的设计和编码技巧被称为在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配适配器模式器模式。通常情况下,通常情况下,客户端可以通过目标类的接口访问它所提供的服务客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。中定义的方法名不一致等原因所导致的。在这种情况下,现有的接口需要转化为

4、客户类期望的接口,这样保在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。现有类所提供的功能,适配器模式可以完成这样的转化。适配器模式w模式动机在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类指的就是个包装类指的就是适配器适配器(Adapter),它所包装的对象就是,它所包装的对象就是适配者适配者(Adaptee),即被适配的类。,即被适配的类。适

5、配器提供客户类需要的接口,适配器提供客户类需要的接口,适配器的实现就是把客户类的请求适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用转化为对适配者的相应接口的调用。也就是说:。也就是说:当客户类调用适配当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。程对客户类是透明的,客户类并不直接访问适配者类。因此,因此,适配适配器可以使由于接口不兼容而不能交互的类可以一起工作器可以使由于接口不兼容而不能交互的类可以一起工作。这就是适。这就是适配器模式的模式动机。配

6、器模式的模式动机。适配器模式w模式定义适配器模式适配器模式(Adapter Pattern):将一个接口转换成客:将一个接口转换成客户希望的另一个接口,适配器模式户希望的另一个接口,适配器模式使接口不兼容的那些使接口不兼容的那些类可以一起工作类可以一起工作,其别名为,其别名为包装器包装器(Wrapper)。适配器。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式既可以作为类结构型模式,也可以作为对象结构型模式。模式。适配器模式w模式定义Convert the interface of a class into another interface clients expect.Adap

7、ter lets classes work together that couldnt otherwise because of incompatible interfaces.Frequency of use:medium high 适配器模式w模式结构类适配器类适配器适配器模式w模式结构对象适配器对象适配器适配器模式w模式结构适配器模式包含如下角色:适配器模式包含如下角色:Target:目标抽象类Adapter:适配器类Adaptee:适配者类Client:客户类适配器模式w模式分析典型的类适配器代码:典型的类适配器代码:public class Adapter extends Adapt

8、ee implements Targetpublic void request()specificRequest();适配器模式w模式分析典型的对象适配器代码:典型的对象适配器代码:public class Adapter extends Targetprivate Adaptee adaptee;public Adapter(Adaptee adaptee)this.adaptee=adaptee;public void request()adaptee.specificRequest();适配器模式w适配器模式实例与解析实例一:仿生机器人实例一:仿生机器人 现需要设计一个可以模拟各种动物行

9、为的机器人,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫,像狗一样跑,使用适配器模式进行系统设计。适配器模式w适配器模式实例与解析实例一:仿生机器人实例一:仿生机器人 适配器模式w适配器模式实例与解析实例一:仿生机器人实例一:仿生机器人 参考代码演示演示演示演示适配器模式w适配器模式实例与解析实例二:加密适配器实例二:加密适配器某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在

10、一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法。适配器模式w适配器模式实例与解析实例二:加密适配器实例二:加密适配器适配器模式w适配器模式实例与解析实例二:加密适配器实例二:加密适配器参考代码演示演示演示演示适配器模式w模式优缺点适配器模式的优点如下:适配器模式的优点如下:将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无需修改原有代码。增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适

11、配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。适配器模式w模式优缺点类适配器模式还具有如下优点:类适配器模式还具有如下优点:由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。类适配器模式的缺点如下:类适配器模式的缺点如下:对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,不能将一个适配者类和它的子类都适配到目标接口。适配器模式w模式优缺点对象适配器模式还具有如下优点:对象适配器模式还具有如下优点:一个对象适配器可以把多个不同的适配者适

12、配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。对象适配器模式的缺点如下:对象适配器模式的缺点如下:与类适配器模式相比,要想置换适配者类的方法就不容易。如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。适配器模式w模式适用环境在以下情况下可以使用适配器模式:在以下情况下可以使用适配器模式:系统需要使用现有的类,而这些类的接口不符合系统的需要。想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。适配器

13、模式w模式应用(1)Sun公司在公司在1996年公开了年公开了Java语言的数据库连接语言的数据库连接工具工具JDBC,JDBC使得使得Java语言程序能够与数据库连语言程序能够与数据库连接,并使用接,并使用SQL语言来查询和操作数据。语言来查询和操作数据。JDBC给出一给出一个客户端通用的抽象接口,每一个具体数据库引擎个客户端通用的抽象接口,每一个具体数据库引擎(如(如SQL Server、Oracle、MySQL等)等)的的JDBC驱动软件驱动软件都是一个介于都是一个介于JDBC接口和数据库引擎接口之间的适配接口和数据库引擎接口之间的适配器软件。器软件。抽象的抽象的JDBC接口和各个数据库

14、引擎接口和各个数据库引擎API之间都之间都需要相应的适配器软件,这就是为各个不同数据库引擎需要相应的适配器软件,这就是为各个不同数据库引擎准备的驱动程序。准备的驱动程序。适配器模式w模式应用(2)在在Spring AOP框架中,对框架中,对BeforeAdvice、AfterAdvice、ThrowsAdvice三种通知类型借助适三种通知类型借助适配器模式来实现。配器模式来实现。public interface AdvisorAdapter /将一个Advisor适配成MethodInterceptor MethodInterceptor getInterceptor(Advisor advi

15、sor);/判断此适配器是否支持特定的Advice boolean supportsAdvice(Advice advice);适配器模式w模式应用(3)在在JDK类库中也定义了一系列适配器类,如在类库中也定义了一系列适配器类,如在mon包中定义的包中定义的InputStreamAdapter类,用于包装类,用于包装ImageInputStream接接口及其子类对象。口及其子类对象。public class InputStreamAdapter extends InputStream ImageInputStream stream;public InputStreamAdapter(Image

16、InputStream stream)super();this.stream=stream;public int read()throws IOException return stream.read();public int read(byte b,int off,int len)throws IOException return stream.read(b,off,len);适配器模式w模式扩展缺省适配器模式缺省适配器模式(Default Adapter Pattern)当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象

17、类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。适配器模式w模式扩展缺省适配器模式缺省适配器模式适配者接口 缺省适配器类 具体业务类 适配器模式w模式扩展缺省适配器模式缺省适配器模式适配器模式w模式扩展双向适配器双向适配器 在对象适配器的使用过程中,如果在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,那么该适配器就是一个双向适配器。适配器模式w模式扩展双向适配器双向适配器 组合模式w模式动机组合模式w模式动机对于对于树形结构树形结构,当容器对象(如文件

18、夹)的某一个方法,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。子文件夹和文件)并调用执行。由于容器对象和叶子对象在功能上的区别,在使用这些由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有对象的客户端代码中必须有区别地对待容器对象和叶子区别地对待容器对象和叶子对象对象,而实际上,而实际上大多数情况下客户端希望一致地处理它大多数情况下客户端希望一致地处理它们们,因为对

19、于这些对象的区别对待将会使得程序非常复因为对于这些对象的区别对待将会使得程序非常复杂杂。组合模式w模式动机组合模式描述了组合模式描述了如何将容器对象和叶子对象进行递归组如何将容器对象和叶子对象进行递归组合合,使得,使得用户在使用时无需对它们进行区分用户在使用时无需对它们进行区分,可以,可以一致一致地对待容器对象和叶子对象地对待容器对象和叶子对象,这就是组合模式的模式动,这就是组合模式的模式动机。机。组合模式w模式定义组合模式组合模式(Composite Pattern):组合多个对象形成树:组合多个对象形成树形结构以形结构以表示表示“整体整体部分部分”的结构层次的结构层次。组合模式对。组合模式

20、对单个对象(即叶子对象)单个对象(即叶子对象)和和组合对象(即容器对象)组合对象(即容器对象)的的使用具有一致性使用具有一致性。组合模式又可以称为组合模式又可以称为“整体整体部分部分”(Part-Whole)模模式式,属于对象的结构模式,它,属于对象的结构模式,它将对象组织到树结构中,将对象组织到树结构中,可以用来描述整体与部分的关系可以用来描述整体与部分的关系。组合模式w模式定义Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat indivi

21、dual objects and compositions of objects uniformly.Frequency of use:medium high 组合模式w模式结构组合模式w模式结构组合模式包含如下角色:组合模式包含如下角色:Component:抽象构件Leaf:叶子构件Composite:容器构件Client:客户类组合模式w模式分析组组合合模模式式的的关关键键是是定定义义了了一一个个抽抽象象构构件件类类,它它既既可可以以代代表表叶叶子子,又又可可以以代代表表容容器器,而而客客户户端端针针对对该该抽抽象象构构件件类类进进行行编编程程,无无需需知知道道它它到到底底表表示示的的是是

22、叶叶子子还还是是容容器,可以对其进行统一处理。器,可以对其进行统一处理。同同时时容容器器对对象象与与抽抽象象构构件件类类之之间间还还建建立立一一个个聚聚合合关关联联关关系系,在在容容器器对对象象中中既既可可以以包包含含叶叶子子,也也可可以以包包含含容容器,以此器,以此实现递归组合,形成一个树形结构实现递归组合,形成一个树形结构。组合模式w模式分析文件系统组合模式结构图:文件系统组合模式结构图:组合模式w模式分析典型的抽象构件角色代码:典型的抽象构件角色代码:public abstract class Componentpublic abstract void add(Component c);

23、public abstract void remove(Component c);public abstract Component getChild(int i);public abstract void operation();组合模式w模式分析典型的叶子构件角色代码:典型的叶子构件角色代码:public class Leaf extends Componentpublic void add(Component c)/异常处理或错误提示 public void remove(Component c)/异常处理或错误提示 public Component getChild(int i)/异常

24、处理或错误提示 public void operation()/实现代码 组合模式w模式分析典型的容器构件角色代码:典型的容器构件角色代码:public class Composite extends Componentprivate ArrayList list=new ArrayList();public void add(Component c)list.add(c);public void remove(Component c)list.remove(c);public Component getChild(int i)(Component)list.get(i);public voi

25、d operation()for(Object obj:list)(Component)obj).operation();组合模式w组合模式实例与解析实例一:水果盘实例一:水果盘在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用组合模式模拟该场景。组合模式w组合模式实例与解析实例一:水果盘实例一:水果盘组合模式w组合模式实例与解析实例一:水果盘实例一:水果盘参考代码演示演示演示演示组合模式w组合模式实例与解析实例二:文

26、件浏览实例二:文件浏览文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无需关心它们的区别。使用组合模式来模拟文件的浏览操作。组合模式w组合模式实例与解析实例二:文件浏览实例二:文件浏览组合模式w模式优缺点组合模式的优点如下:组合模式的优点如下:可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,使得增加新构件也更容易。客户端调用简单,客户端可以一致的使用组合结构或其中单个对象。定义了包含叶子对象和容器对象的类层次结构,叶子对象可以被组合成更复杂的容器对象,而

27、这个容器对象又可以被组合,这样不断递归下去,可以形成复杂的树形结构。更容易在组合体内加入对象构件,客户端不必因为加入了新的对象构件而更改原有代码。组合模式w模式优缺点组合模式的缺点如下:组合模式的缺点如下:使设计变得更加抽象,对象的业务规则如果很复杂,则实现组合模式具有很大挑战性,而且不是所有的方法都与叶子对象子类都有关联。增加新构件时可能会产生一些问题,很难对容器中的构件类型进行限制。组合模式w模式适用环境在以下情况下可以使用组合模式:在以下情况下可以使用组合模式:需要表示一个对象整体或部分层次,在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,可以一致地对待它们。让客户能

28、够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无需关心对象层次结构的细节。对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。组合模式w模式应用(1)XML文档解析文档解析 Carson 31.95 05/01/2001 MSPress WA 组合模式w模式应用(2)操作系统中的目录结构操作系统中的目录结构是一个树形结构,因此在是一个树形结构,因此在对文件和文件夹进行操作时可以应用组合模式,例如对文件和文件夹进行操作时可以应用组合模式,例如杀毒软件在查毒或杀毒时,既可以针对一个具体文件,杀毒软件在查毒或杀毒时,既可以针对一个具体文件,也可以针对一个目录。如果是对目录查毒或杀

29、毒,将也可以针对一个目录。如果是对目录查毒或杀毒,将递归处理目录中的每一个子目录和文件。递归处理目录中的每一个子目录和文件。组合模式w模式应用(3)JDK的的AWT/Swing是组合模式在是组合模式在Java类库中的一个典型类库中的一个典型实际应用。实际应用。组合模式w模式扩展更复杂的组合模式更复杂的组合模式组合模式w模式扩展透明透明组合模式组合模式组合模式w模式扩展安全安全组合模式组合模式外观模式w模式动机外观模式w模式动机引入外观角色之后,引入外观角色之后,用户只需要直接与外观角色交互,用户与子系用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现统之间的复杂关系由外观

30、角色来实现,从而降低了系统的耦合度。,从而降低了系统的耦合度。外观模式w模式定义外观模式外观模式(Facade):外部与一个子系统的通信必须通过:外部与一个子系统的通信必须通过一个一个统一的外观对象统一的外观对象进行,为子系统中的一组接口进行,为子系统中的一组接口提供提供一个一致的界面一个一致的界面,外观模式定义了一个高层接口,这个,外观模式定义了一个高层接口,这个接口接口使得这一子系统更加容易使用使得这一子系统更加容易使用。外观模式又称为。外观模式又称为门门面模式面模式,它是一种,它是一种对象结构型模式对象结构型模式。外观模式w模式定义Provide a unified interface

31、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外观模式w模式结构外观模式w模式结构外观模式包含如下角色:外观模式包含如下角色:Facade:外观角色SubSystem:子系统角色外观模式w模式分析根根据据“单单一一职职责责原原则则”,在在软软件件中中将将一一个个系系统统划划分分为为若若干干个个子子系系统统有有利利于于降降低低整整个个系系统统的的复复杂杂性性,一一个个常

32、常见见的的设设计计目目标标是是使使子子系系统统间间的的通通信信和和相相互互依依赖赖关关系系达达到到最最小小,而而达达到到该该目目标标的的途途径径之之一一就就是是引引入入一一个个外外观观对对象象,它它为为子子系系统统的的访访问问提提供供了了一一个个简简单单而而单单一的入口一的入口。外外观观模模式式也也是是“迪迪米米特特法法则则”的的体体现现,通通过过引引入入一一个个新新的的外外观观类类可可以以降降低低原原有有系系统统的的复复杂杂度度,同同时时降降低低客客户户类类与与子子系系统统类类的的耦耦合合度度。外观模式w模式分析外观模式要求一个子系统的外部与其内部的通信外观模式要求一个子系统的外部与其内部的

33、通信通过一个统一的通过一个统一的外观对象进行外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,外观类将客户端与子系统的内部复杂性分隔开,使得使得客户端只需要与外观对象打交道,而不需要与子系统内部的客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道很多对象打交道。外观模式的目的在于外观模式的目的在于降低系统的复杂程度降低系统的复杂程度。外观模式从很大程度上外观模式从很大程度上提高了客户端使用的便捷性提高了客户端使用的便捷性,使得客户端,使得客户端无需关心子系统的工作细节,通过外观角色即可调用相关功能。无需关心子系统的工作细节,通过外观角色即可调用相关功能。外观模式w模式分析

34、典型的外观角色代码:典型的外观角色代码: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();外观模式w外观模式实例与解析实例一:电源总开关实例一:电源总开关现在考察一个电源总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源总开关可以控

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

36、和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。外观模式w外观模式实例与解析实例二:文件加密实例二:文件加密外观模式w模式优缺点外观模式的优点如下:外观模式的优点如下:它对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。它实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。它降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何

37、影响,而且子系统内部变化也不会影响到外观对象。它只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。外观模式w模式优缺点外观模式的缺点如下:外观模式的缺点如下:不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。在不引入新外观类的情况下,增加新的子系统可能需要修改外观类的源代码,违背了“开闭原则”。外观模式w模式适用环境在以下情况下可以使用外观模式:在以下情况下可以使用外观模式:当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。客户程序与多个子系统之间存在很大的依赖

38、性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。外观模式w模式应用(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

39、 int executeUpdate(String sql).public ResultSet executeQuery(String sql).public void close().外观模式w模式应用(2)Session外观模式外观模式是外观模式在是外观模式在Java EE框架中的应用。框架中的应用。外观模式w模式扩展一个系统有多个外观类一个系统有多个外观类在外观模式中,通常只需要一个外观类,并且此外观类只有一个实例,换言之它是一个单例类。在很多情况下为了节约系统资源,一般将外观类设计为单例类。当然这并不意味着在整个系统里只能有一个外观类,在一个系统中可以设计多个外观类,每个外观类都负责和

40、一些特定的子系统交互,向用户提供相应的业务功能。外观模式w模式扩展不要试图通过外观类为子系统增加新行为不要试图通过外观类为子系统增加新行为 不要通过继承一个外观类在子系统中加入新的行为,这种做法是错误的。外观模式的用意是为子系统提供一个集中化和简化的沟通渠道,而不是向子系统加入新的行为,新的行为的增加应该通过修改原有子系统类或增加新的子系统类来实现,不能通过外观类来实现。外观模式w模式扩展外观模式与迪米特法则外观模式与迪米特法则 外观模式创造出一个外观对象,将客户端所涉及的属于一个子系统的协作伙伴的数量减到最少,使得客户端与子系统内部的对象的相互作用被外观对象所取代。外观类充当了客户类与子系统

41、类之间的“第三者”,降低了客户类与子系统类之间的耦合度,外观模式就是实现代码重构以便达到“迪米特法则”要求的一个强有力的武器。外观模式w模式扩展抽象外观类的引入抽象外观类的引入 外观模式最大的缺点在于违背了“开闭原则”,当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程。对于新的业务需求,不修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,同时通过修改配置文件来达到不修改源代码并更换外观类的目的。外观模式w模式扩展抽象外观类的引入抽象外观类的引入 代理模式w模式动机在在某某些些情情况况下下

42、,一一个个客客户户不不想想或或者者不不能能直直接接引引用用一一个个对对象象,此此时时可可以以通通过过一一个个称称之之为为“代代理理”的的第第三三者者来来实实现现间间接接引引用用。代代理理对对象象可可以以在在客客户户端端和和目目标标对对象象之之间间起起到到中中介介的的作作用用,并并且且可可以以通通过过代代理理对对象象去去掉掉客客户户不不能能看看到到的内容和服务或者添加客户需要的额外服务的内容和服务或者添加客户需要的额外服务。代理模式w模式动机代理模式w模式动机代理模式w模式动机通过通过引入一个新的对象引入一个新的对象(如小图片和远程代理对(如小图片和远程代理对象)象)来实现对真实对象的操作或者将

43、新的对象来实现对真实对象的操作或者将新的对象作为真实对象的一个替身作为真实对象的一个替身,这种实现机制即为,这种实现机制即为代理模式,代理模式,通过引入代理对象来间接访问一个通过引入代理对象来间接访问一个对象对象,这就是代理模式的模式动机。,这就是代理模式的模式动机。代理模式w模式定义代理模式代理模式(Proxy Pattern):给某一个对象:给某一个对象提供一个代提供一个代理理,并,并由代理对象控制对原对象的引用由代理对象控制对原对象的引用。代理模式的英。代理模式的英文叫做文叫做Proxy或或Surrogate,它是一种,它是一种对象结构型模式对象结构型模式。代理模式w模式定义 Provi

44、de a surrogate or placeholder for another object to control access to it.Frequency of use:medium high 代理模式w模式结构代理模式w模式结构代理模式包含如下角色:代理模式包含如下角色:Subject:抽象主题角色Proxy:代理主题角色RealSubject:真实主题角色代理模式w模式分析代代理理模模式式示示意意结结构构图图比比较较简简单单,一一般般可可以以简简化化为为如如下下图图所所示示,但但是在真实的使用和实现中要复杂很多。是在真实的使用和实现中要复杂很多。代理模式w模式分析典型的代理类实现

45、:典型的代理类实现:public class Proxy implements Subjectprivate RealSubject realSubject=new RealSubject();public void preRequest().public void request()preRequest();realSubject.request();postRequest();public void postRequest()代理模式w代理模式实例与解析实例一:论坛权限控制代理实例一:论坛权限控制代理 在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改自己的注册信息、修改自

46、己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。使用代理模式来设计该权限管理模块。在本实例中我们使用代理模式中的保护代理,该代理用于控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。代理模式w代理模式实例与解析实例一:论坛权限控制代理实例一:论坛权限控制代理 代理模式w代理模式实例与解析实例一:论坛权限控制代理实例一:论坛权限控制代理 参考代码演示演示演示演示代理模式w代理模式实例与解析实例二:数学运算代理实例二:数学运算代理 模拟应用远程代理来访问另外一个应用程序域中的对象,如果在远程实现了加减乘除等运算,在本地需要调用,那么可以考虑在本地设置一个代理。代理模式w代理模

47、式实例与解析实例二:数学运算代理实例二:数学运算代理 代理模式w模式优缺点代理模式的优点如下:代理模式的优点如下:代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。保护代理可以控制对真实对象的使用权限。代理模式w模式优缺点代理模式的缺点如下:代理模式的缺点如下:由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。实现代理模式

48、需要额外的工作,有些代理模式的实现非常复杂。代理模式w模式适用环境根据代理模式的使用目的,常见的代理模式有以下几种类型:根据代理模式的使用目的,常见的代理模式有以下几种类型:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个本地的代表对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又叫做大使(Ambassador)。虚拟(Virtual)代理:如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。

49、一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。代理模式w模式适用环境根据代理模式的使用目的,代理模式有以下几种类型(续):根据代理模式的使用目的,代理模式有以下几种类型(续):保护(Protect or Access)代理:控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。防火墙(Firewall)代理:保护目标不让恶意用户接近。同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没

50、有冲突。智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,如将此对象被调用的次数记录下来等。代理模式w模式应用(1)Java RMI(Remote Method Invocation,远程方法调用,远程方法调用)。代理模式w模式应用(2)EJB、Web Service等分布式技术都是代理模式等分布式技术都是代理模式的应用。的应用。在在EJB中使用了中使用了RMI机制,远程服务器中的机制,远程服务器中的企业级企业级Bean在本地有一个桩代理,客户端通过桩来调在本地有一个桩代理,客户端通过桩来调用远程对象中定义的方法,而无需直接与远程对象交用远程对象中定义的方

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁