《结构型模式》PPT课件.ppt

上传人:小飞机 文档编号:5568179 上传时间:2023-07-28 格式:PPT 页数:17 大小:263.49KB
返回 下载 相关 举报
《结构型模式》PPT课件.ppt_第1页
第1页 / 共17页
《结构型模式》PPT课件.ppt_第2页
第2页 / 共17页
《结构型模式》PPT课件.ppt_第3页
第3页 / 共17页
《结构型模式》PPT课件.ppt_第4页
第4页 / 共17页
《结构型模式》PPT课件.ppt_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《《结构型模式》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《结构型模式》PPT课件.ppt(17页珍藏版)》请在三一办公上搜索。

1、第六章 结构型设计模式,Structural Design Patterns,讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过聚合或依赖一些对象,从而实现新的功能(对象结构型模式)。,6.1 Adapter 适配器,6.1.1 意图 将一个类的接口转化成客户希望的另外一个接口。Adapter模式使得原来 由于接口不兼容而不能使其工作的那些类可以一起工作。别名:包装器 Wrapper,Match interfaces of different classes,6.1.2 结构图:,1.类适配器使用继承对一个接口与另一个接口进行匹配:,client,Target,r

2、equest(),Adaptee,specificRequest(),Adapter,request(),implementation,specificrequest(),定义Client使用的与特定领域相关的接口,定义一个已经存在的接口,这个接口需要适配,对Adaptee的接口与Target接口进行适配,client,Target,request(),Adaptee,specificRequest(),Adapter,request(),adaptee.specificrequest(),2.对象适配器依赖于对象组合:,adaptee,组合,return adaptee.specificre

3、quest(),例:图形适配器显卡,显示器,图形发送设备,显卡,中央处理器,Java 代码:,public class Target/传送图形信号 public String request()return“Graphic sender”;,public class Adapter extends Target/被适配者 cpu private Adaptee adaptee;/装入被适配者 public Adapter(Adaptee adaptee)this.adaptee=adaptee;/被适配者传过来的数据转化成图形输出 public String request()return a

4、daptee.getData();,public class Adaptee/CPU输出的数据 public String getData()return“CPU data”;,public class Client public static void main(String args)/CPU经过显卡适配Target target=new Adapter(new Adaptee();System.out.println(target.request();,例:图形编辑器,DrawingEditor,Shape,boundingBox()createManipulator(),LineSha

5、pe,PolygonShape,TextShape,boundingBox()createManipulator(),boundingBox()createManipulator(),boundingBox()createManipulator(),TextView,getExtent(),text,return text.getExtent(),return new TextManipulator,例:.NET中的适配器模式,RCW,CCW,Consumer,.NET client calling a COM server,Managed,Unmanaged,Consumer,COM cli

6、ent calling a.NET server,Runtime Callable Wrapper,COM Callable Wrapper,.NET程序与COM相互调用示意图,例:Adapter和Java API,ActionListener,适配过程,MyListener,actionPerformed(),MyClass,myMethod(),MyButton,addActionListener(),作为适配器的Java Listener,6.1.3 Adapter模式适用性 你想使用一个已经存在的类,而它的接口不符合你的需要。你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见

7、的 类协同工作。你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹 配它们的接口对象适配器可以适配他的父类接口。,6.1.4 适配器效果 类适配器:,用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要 匹配一个类以及所有的子类时,类Adapter将不能胜任工作。使用Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的 一个子类。仅仅引入了一个对象,并不需要额外的指针移间接得到Adaptee。,对象适配器:,允许一个Adapter与多个Adaptee同时工作。使得重定义Adaptee的行为比较困难。,6.2 Brid

8、ge 桥接模式,6.2.1 意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。,动机:当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。,别名:Handle/Body,例:在一个用户界面工具箱中,一个可移植的Window抽象部分的实现,用继承机制:两个不足之处,Window,XWindow,PMWindow,Unix系统,IBM的PM系统,Window,XWindow,PMWindow,IconWin

9、dow,XIconWindow,PMIconWindow,专门将Window抽象用于图标处理,扩展Window抽象使之适用于不同的种类的窗口或新的系统平台很不方便,继承机制使得客户代码与平台相关,采用Bridge模式:,Window,drawText()drawRect(),Windowimp,devDrawText()devDrawLine(),IconWindow,drawBorder(),XWindow,PMWindow,devDrawText()devDrawLine(),devDrawText()devDrawLine(),imp,bridge,窗口接口部分,平台相关的窗口实现部分,

10、6.2.2 Bridge 结构图,Client,Abstraction,operation(),RefinedAbstraction,imp.operationImp(),Implementor,operationImp(),ConcreteImplementorA,ConcreteImplementorB,operationImp(),operationImp(),imp,定义抽象类的接口维护一个指向Implementor类型对象的引用,扩充由Abstraction定义的接口,定义实现类的接口,该接口与Abstraction的接口可以完全不同。Implementor接口仅提供基本操作。,实现

11、Implementor接口并定义它的具体实现,例:通用的日志记录工具,DatabaseLog,TextFileLog,Log,write(),ImpLog,writeLog(),imp,NImpLog,JImpLog,XmlLog,BImpLog,.Net平台,Java平台,Borland平台,abstractclassShape publicabstract voiddraw();classRectangleextendsShape classCircleextendsShape/这里业务出现了多种画图方式,V1,V2/使用继承,创建不同绘图的类,类数量增多 classV1Rectangle

12、extendsRectangle publicvoiddraw()V1.draw_line();classV2RectangleextendsRectangle publicvoiddraw()V2.draw_line();classV1CircleextendsCircle publicvoiddraw()V1.draw_Circle();classV2CircleextendsCircle publicvoiddraw()V2.draw_Circle();,abstractclassShape publicabstract voiddraw(DrawImp dp);interfaceDra

13、wImp publicvoiddrawLine();publicvoiddrawCircle();classV1DrawImp implements DrawImp publicvoiddrawLine();publicvoiddrawCircle();classV2DrawImp implements DrawImp publicvoiddrawLine();publicvoiddrawCircle();/使用组合,聚集Drawing classRectangleextendsShape publicvoiddraw(DrawImpdp)dp.drawLine();classCircleextendsShape publicvoiddraw(DrawImpdp)dp.drawCircle();,继承实现,采用Bridge模式,6.2.3 适用性,你不希望在抽象和他的实现部分之间有一个固定的绑定关系。类的抽象以及它的实现都应该通过生成子类的方法加以扩充。通过Bridge 模式使你可以对不同的抽象接口和实现进行组合,并分别对它们进行扩充。对一个抽象的实现部分的修改应对客户不产生影响,客户端代码不必重新 编译。虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色 需要独立变化,设计要求需要独立管理这两者。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号