设计模式与设计原则-new_ppt [兼容模式].pdf

上传人:qwe****56 文档编号:69565792 上传时间:2023-01-07 格式:PDF 页数:55 大小:2.11MB
返回 下载 相关 举报
设计模式与设计原则-new_ppt [兼容模式].pdf_第1页
第1页 / 共55页
设计模式与设计原则-new_ppt [兼容模式].pdf_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《设计模式与设计原则-new_ppt [兼容模式].pdf》由会员分享,可在线阅读,更多相关《设计模式与设计原则-new_ppt [兼容模式].pdf(55页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1设计模式的思想根源是基本原则设计模式的思想根源是基本原则的宏观运用的宏观运用,本质上是没有任何模本质上是没有任何模式的式的发现模式的人永远是大师发现模式的人永远是大师,而死守而死守模式的人模式的人,最对只能是一个工匠最对只能

2、是一个工匠.23设计模式设计模式Design Pattern面向对象研究的新领域面向对象研究的新领域20世纪世纪90年代,面向对象方法与技术在年代,面向对象方法与技术在国内软件业界十分火爆,人们热衷于谈国内软件业界十分火爆,人们热衷于谈论“对象”并引以为荣。十多年来,人论“对象”并引以为荣。十多年来,人们发表、出版了无数的文章们发表、出版了无数的文章和书籍和书籍。现。现在,在,该写该写的的似乎都写完似乎都写完了,没有新了,没有新花样花样玩玩了,了,真真是一是一片片无无聊聊设计模式设计模式(Design Pattern)及时问及时问世,世,面向对象面向对象爱好者爱好者们们终终于有了新的于有了新的

3、追求追求4设计模式:起源设计模式:起源起起源源Christopher Alexander当当代代著名建筑著名建筑大师大师加州加州大大学伯克利学伯克利分分校建筑学教授校建筑学教授、环境结构环境结构研究研究所所长所所长、美美国国艺艺术术与与科学院院士科学院院士在在建筑建筑、室室内、计内、计算机算机、家具家具设设计计甚至哲学甚至哲学方面方面都卓都卓有有建树建树著作:著作:A Pattern Language、The Timeless Way of Building5设计模式:起源设计模式:起源Gof(Gang Of Four,“,“四四人人帮帮”)Erich Gamma,Richard Helm,R

4、alph Johnson,John Vlissides1995年出版了年出版了Design Patterns:Elements of Reusable Object-Oriented Software该书确立该书确立了设计模式了设计模式这这个术个术语语,创导创导了了一一种种新的面向对象设计思新的面向对象设计思潮潮。从此从此,参参与设计模式研究的人数爆与设计模式研究的人数爆炸性地增长炸性地增长6设计模式:起源设计模式:起源2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation i

5、s for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.27设计模式设计模式什么叫模式?什么叫模式?“每一个模式描述了在我们周围不断重“每一个模式描述了在我们周围不断重复发生的问题,以及该问题的解决方案复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使的核心。这样,你就能一次又一次地使用该解决方案而不必重复劳动”用该解决方案而不必重复劳动”尽管软件技术发展非常快,但是仍然有尽管软件技术发展非常快,但是仍然有非常多的设计模式可以让我们套用

6、非常多的设计模式可以让我们套用设计模式可以帮助人们简便地复用以前设计模式可以帮助人们简便地复用以前成功的设计方案,提高工作效率成功的设计方案,提高工作效率8设计模式:研究现状设计模式:研究现状设计模式的研究现设计模式的研究现状状pattern 与与 Java、C#pattern 与与 组组件技术件技术(如如CORBA)pattern 与与 系统系统结构结构pattern 与与 泛型编程泛型编程(generic programming)相相结结合合其他其他(例如例如UML等等)9模式的分模式的分类类(gof提提出的出的23个个)创建创建型型结构结构型行型行为为型型类类Factory Method

7、Adapter(类类)InterpreterTemplate Method对对象象Abstract FactoryBuilderPrototypeSingleton Adapter(对象对象)BridgeCompositeDecoratorFacadeFlyweightProxy Chain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor 10Bridge(桥梁桥梁)模式模式案例案例有一个有一个叫叫做做HuntBird的的游戏游戏,里里面面需要需要表表示各示各种种各各样样的的鸟类鸟类11Br

8、idge(桥梁桥梁)模式模式最最初初的设计的设计12Bridge(桥梁桥梁)模式模式需需求求变化变化:鸟类要会飞鸟类要会飞2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.313Bridge(桥梁桥梁)模式模式如果增加一种鸟类“企鹅”呢?如果增加一种鸟类“企鹅”呢?14Bri

9、dge(桥梁桥梁)模式模式改进改进方法方法:对“对“飞飞”使使用多用多态态15Bridge(桥梁桥梁)模式模式改进改进方法方法:再次使再次使用用继承继承16Bridge(桥梁桥梁)模式模式如果如果增加增加“游泳游泳”行行为为呢呢?17Bridge(桥梁桥梁)模式模式继承继承只只会使得会使得问问题越题越来来越越复复杂杂继承继承是面向对象的基本法是面向对象的基本法宝啊宝啊?OO=类类对象对象继承消息通信继承消息通信设计原则设计原则1:组合优先组合优先优先使优先使用用组合组合,而,而不不是是继承继承18设计原则:组合优先设计原则:组合优先继承继承复复用的用的优点优点可可以以很容易很容易的的修改或修改

10、或扩扩展展父父类类的的实实现现2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.419设计原则:组合优先设计原则:组合优先继承复用的缺点继承复用的缺点继承破坏封装,因为父类的实现细节完继承破坏封装,因为父类的实现细节完全暴露给子类全暴露给子类(白盒复用白盒复用)父类的实现发生

11、改变,则子类必受牵连父类的实现发生改变,则子类必受牵连继承是静态的,不能在运行时发生改变,继承是静态的,不能在运行时发生改变,不灵活不灵活20设计原则:组合优先设计原则:组合优先组合组合复复用的用的优点优点不不破坏封装破坏封装,这种复这种复用是用是黑盒黑盒复复用,用,因因为为成成员员对象的内对象的内部细节部细节对新对象对新对象保密保密所所需需依赖少依赖少(只只依赖接口依赖接口)是是动态动态的,的,可可以以把把成成员员对象对象动态动态替换替换为为另另一个一个类型相类型相同同的对象的对象组合组合复复用的用的缺缺点点对象数对象数量量会会增加增加使使用用委托委托(delegation)会使得系统会使得

12、系统复复杂杂21设计原则:组合优先设计原则:组合优先组合优先组合优先Favor composition over inheritance当当需要需要应应对对变化变化的的时时候候,应应该该首首先使先使用用组合组合的方式,而的方式,而不不是是继承继承因因为为组合组合更更加加灵活灵活例例1:汽车汽车有有很很多多种种,小轿车小轿车、货车货车、客车客车,有的有的车车是是客货两客货两用,有的用,有的车水陆两车水陆两用用22设计原则:组合优先设计原则:组合优先如果使如果使用用继承继承来来描述:描述:一一旦旦增加增加新的新的汽车汽车种种类或类或用用途途,都都需要需要大大量量改动改动原有代原有代码码23设计原则

13、:组合优先设计原则:组合优先使使用“用“组合组合”思”思路考虑路考虑问问题题“汽车汽车”拥拥有有某某种种或或某些某些“用“用途途”“汽车汽车”和和“用“用途途”独独立立变化变化,互互不不影影响响24设计原则:组合优先设计原则:组合优先区区分“分“Is-A”与“与“Has-A”有一个有一个系统需要系统需要描述描述经理经理、雇员雇员和学生和学生它它们们都都是人,是人,所所以以:2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purp

14、oses only.Microsoft makes no warranties,express or implied,in this summary.525设计原则:组合优先设计原则:组合优先问题问题有些人既是经理,又是学生,比如某位有些人既是经理,又是学生,比如某位在读在读MBA的老总的老总26设计原则:组合优先设计原则:组合优先换换一个一个角度看角度看问问题题雇员雇员、经理经理、学生学生其其实实都都是是角色角色的一的一种种人人拥拥有有角色角色27Bridge(桥梁桥梁)模式模式是是什么导什么导致致设计的设计的不完美?不完美?变化变化,无法,无法避免避免的、的、经经常常的的需需求求变化变化设

15、计设计者者的的理理想想当当需需求求变化变化的的时时候候,尽可尽可能能少少的的修改修改代代码码就可就可以以满足满足新的新的需需求求设计原则设计原则2:封装封装可变可变性性发现代发现代码码容易变化容易变化的的部部分,分,封装之封装之,使使它它和不和不容易变化容易变化的的部部分分独独立立开开来来28Bridge(桥梁桥梁)模式模式“发现“发现变化点变化点”29Bridge(桥梁桥梁)模式模式“封装封装变化点变化点”变化点变化点1:小小鸟鸟一一家家30Bridge(桥梁桥梁)模式模式“封装封装变化点变化点”变化点变化点2:鸟类鸟类的的行行为为飞飞2010年12月23日8时14分 2003-2004 M

16、icrosoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.631Bridge(桥梁桥梁)模式模式“封装变化点”“封装变化点”变化点变化点2:鸟类的行为:鸟类的行为游泳游泳32Bridge(桥梁桥梁)模式模式“使变化点使变化点和不和不变点变点独独立立开开来”来”在在这这个个例例子子里其里其实实是是两两个个变化点相变化点相独独立立“鸟类鸟类”

17、和和“行行为”为”什么什么关关系系?鸟类鸟类拥拥有有行行为为鸟类行鸟类行为的为的具具体实体实现,现,委托委托“行行为”为”类类来来完完成成33鸟鸟儿拥儿拥有有飞飞、游泳游泳的的行行为为34Bridge(桥梁桥梁)模式模式使使用用桥梁桥梁模式的模式的效果效果比比如如增加增加一一种种鸟类鸟类“鹅鹅”,”,相相应应的的要要增增加加一一种种游泳游泳的的行行为“为“红红掌拨清波掌拨清波”只只需要需要增加增加一个一个鸟类鸟类的的子子类类“鹅鹅”增加增加一个一个游泳游泳的的行行为“为“红红掌拨清波掌拨清波”设设置置“鹅鹅”的”的飞飞翔翔行行为为“为为“飞飞不起不起来”来”设设置置“鹅鹅”的”的游泳行游泳行为

18、为“为为“红红掌拨清波掌拨清波”原有代原有代码码不不需要改动需要改动!35Bridge(桥梁桥梁)模式模式36Bridge(桥梁桥梁)模式模式使使用用桥梁桥梁模式的模式的效果效果当当需需求求改变改变的的时时候候(增加增加动动物物或行或行为为),只只需要简需要简单添单添加加几几个个类类对原有代对原有代码码不不需要改动需要改动保保证证了代了代码码的的稳定稳定,提高提高了了可可维护维护性性设计原则设计原则3:开开-闭闭原则原则在设计一个软件的在设计一个软件的时时候候,应应当当使使这这个个软件软件可可以在以在不不被被修改修改的的前提前提下下扩扩展展2010年12月23日8时14分 2003-2004

19、Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.737Bridge(桥梁桥梁)模式模式结构结构38Bridge(桥梁桥梁)模式模式意图意图将抽将抽象象部部分与分与它它的的实实现现部部分分分分离离,使使它它们们都都可可以以独独立地立地变化变化适适用用性性抽抽象象和和它它的的实实现现部部分分可可以以独独立立变化变化类类的的抽抽象以

20、象以及及它它的的实实现现都都可可以以通通过过生生成成子子类类的方法的方法加加以以扩扩充充实实现现部部分的分的修改修改不不会会对对客客户产户产生生影响影响.39Bridge(桥梁桥梁)模式模式应应用用举举例例1:“小小朋友画画朋友画画”使使用用蜡笔蜡笔需要需要大大中中小小三三种种型型号号每种每种型型号号各各有有12种种颜颜色色共共36支支40Bridge(桥梁桥梁)模式模式使使用用毛笔毛笔:大、大、中中、小小3支毛笔支毛笔12种种颜料颜料41Bridge(桥梁桥梁)模式模式蜡笔蜡笔和和毛笔毛笔的的差别差别蜡笔蜡笔:笔笔和和颜颜色色无法分无法分离离,因因此此需要需要36种种蜡笔蜡笔毛笔毛笔:笔笔和

21、和颜颜色色可可以以独独立立选择选择,因因此此只只有有3+12=15个个子子类类体体现了现了Bridge模式模式将将继承继承关关系系转转换换为为组合组合关关系系,从从而而降低降低了了系统系统间间的的耦耦合合,减减少少了代了代码码冗余冗余42Bridge(桥梁桥梁)模式模式应应用用举举例例2有一个有一个CAD软件,软件,可可以以画画多多种种图形图形同同时时支持支持多多套套绘图绘图算算法法传传统统的设计的设计2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for inf

22、ormational purposes only.Microsoft makes no warranties,express or implied,in this summary.843Bridge(桥梁桥梁)模式模式应用应用Bridge模式模式44Bridge(桥梁桥梁)模式模式分分析析图形图形Shape是一个是一个抽抽象象概念概念,它它可可以有以有许许多多具具体体化化(变化点变化点1)图形图形的的显显示示Drawing是是图形图形的的实实现,现,它它也也可可以有以有许许多多套套算算法法(变化点变化点2)Bridge模式模式使使用用组合组合代代替替继承继承,避免避免了了复复杂杂的的继承继承体

23、体系系,使得使得两两个个变化点变化点独独立立变化变化,互互不不影响影响45设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性“开开-闭闭”原则”原则Bertrand Meyer:“Software should be open for extension,but closed for modification”在设计一个软件的在设计一个软件的时时候候,应应当当使使这这个软件个软件可可以在以在不不被被修改修改的的前提前提下下扩扩展展解解释释已已有模有模块块,尤尤其其是最是最重重要要的的抽抽象象层层模模块块不不能能动动:保保证稳定证稳定性和性和延续延续性性可可以以扩扩展展新模新模块块:

24、增加:增加新新行行为,为,保保证证灵活灵活性性46设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性Bertrand Meyer对象技术大师对象技术大师法国工法国工程程院院士院院士苏黎苏黎世工世工学院学院计计算机算机系系教授教授发发明明了了Eiffel语语言言和和按契约按契约设计设计(Design by Contract)的思想的思想早早年年参参与了与了Z形形式式语语言言的设计的设计名著名著面向对象软件面向对象软件构构造造47设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性玉帝遵照玉帝遵照“开开-闭闭”原则”原则维护天庭秩序维护天庭秩序当当年年孙悟空孙悟空大大闹天空闹

25、天空,向,向天庭天庭发出发出挑挑战战:“皇皇帝帝轮流轮流做做,明明年年到到我家我家.只只教教他他搬搬出出去去,将天将天宫宫让让与与我我!”太太白白金星金星给给玉玉皇皇大大帝帝建建议道议道:“降降一一道招安道招安圣旨圣旨,把把他他宣宣来上界来上界.与与他他籍名籍名在在箓箓.一则一则不不动动众众劳劳师,师,二二则则收仙收仙有有道道也也。”。”48设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性分分析析“不不动动众众劳劳师”、师”、不不破坏破坏天天规规就就是“是“闭闭”收仙收仙有有道道就就是“是“开开”招安招安,就就是是玉帝玉帝的“的“开开-闭闭”原则”原则:既既让让孙悟孙悟空空满满意

26、意,又又不不必必更更改改天庭天庭现有的现有的秩序秩序2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.949设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性分析分析现有的天庭秩序是系统的最高抽象层现有的天庭秩序是系统的最高抽象层弼马温这个职位只是具体的实现层弼马

27、温这个职位只是具体的实现层招安的关键就是不允许更改现有的天庭招安的关键就是不允许更改现有的天庭秩序,但是允许将妖猴纳入到文武百官秩序,但是允许将妖猴纳入到文武百官中,从而扩展了这一秩序的具体实现中,从而扩展了这一秩序的具体实现50设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性“封装封装可变可变性性原则”原则”gof:“考虑考虑你你的设计的设计中中什么什么可可能能会会发发生生变化变化.考虑考虑你你允允许许什么什么发发生生变化变化而而不不让让这这一一变化变化导导致致重重新设计”新设计”Shalloway:“发现“发现变化点变化点,并,并封装之封装之”一一种种可变可变性不性不应应散落

28、散落在代在代码码的的很很多多角角落落一一种种可变可变性不性不应应当当与与另另一一种种可变可变性性混混合合在一在一起起51设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性设计模式对“设计模式对“开开-闭闭”原则的”原则的支持支持比比如如Bridge桥梁桥梁模式模式:将抽将抽象象部部分分和和实实现现部部分分分分别别封装封装,可可以分以分别别独独立立变化变化52设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性对“对“开开-闭闭”原则”原则支持支持的的不好不好的的例例子子java.util.Calendarjava提提供供的的描述描述历历法的法的抽抽象象类类描述描述公历公历

29、的的子子类类我我们们希望希望再再派派生生出一个出一个子子类类,用于,用于描述描述阴历阴历53设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性问问题题:Calendar只只定定义义了了适适用于用于公历公历的的常常量量和和方法方法public final static int SUNDAY=1;public final static int MONDAY=2;.public final static int JANUARY =0;public final static int FEBRUARY=1;.public void setFistDayOfWeek(int value);pu

30、blic int getFirstDayOfWeek();.54设计原则:开设计原则:开-闭原则、封装可变性闭原则、封装可变性问问题题英英文的文的星期星期、月份月份名名称称不不符符合合中中国国阴历阴历的的叫叫法法阴历阴历以以10天天为一为一周周,公历公历和和阴历阴历每每月月的的天天数数也也不不同同,所所以以Calendar关关于于星期星期、月份月份的的算算法法不不适适合合阴历阴历总之总之,Calendar无法无法容容纳纳中中国国阴历阴历,因因此不此不支持支持“开开-闭闭”原则”原则2010年12月23日8时14分 2003-2004 Microsoft Corporation.All righ

31、ts reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1055Strategy(策略策略)模式模式桥梁模式桥梁模式使得两个变化点的独立使得两个变化点的独立56设计原则设计原则找找出出应应用用中中可可能能需要变化需要变化之之处处把它把它们们独独立立出来出来不不要要和和那那些些不不需要变化需要变化的代的代码码混混在一在一起起57Strategy(策略策略)模式模式单单独看独看飞飞的的行行为的为的

32、实实现现策略策略模式模式:封装封装了一了一系系列列算算法,法,使得使得它它们们可可以以相相互替换互替换效果效果:算:算法法可可以以独独立立变化变化58设计原则针针对对接口接口编程编程,而,而不不是是针针对对实实现现编程编程12/23/201059Public class PartPublic class Partprivate double basePrice;private double basePrice;public void setPrice(double price)public void setPrice(double price)basePrice=price;basePrice

33、=price;public double getPrice()public double getPrice()return basePrice;return basePrice;策略模式策略模式-开闭原则开闭原则例例-计算价格计算价格12/23/201060Public double totalprice(Part parts)Public double totalprice(Part parts)double total=0.0;double total=0.0;for(int i=0;iparts.length;i+)for(int i=0;iparts.length;i+)total+=

34、partsi.getPrice();total+=partsi.getPrice();return total;return total;某类方法某类方法2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1112/23/201061?内存折扣?内存折扣?思考思考12/23/2

35、01062Public double totalprice(Part parts)Public double totalprice(Part parts)double total=0.0;double total=0.0;for(int i=0;iparts.length;i+)for(int i=0;iparts.length;i+)if(partsI instanceof Memory)if(partsI instanceof Memory)total+=partsi.getPrice()*0.9;total+=partsi.getPrice()*0.9;elseelsetotal+=pa

36、rtsi.getPrice();total+=partsi.getPrice();return total;return total;方法方法12/23/201063?符合符合OCPOCP吗?吗?思考思考12/23/201064Public class Memory extends PartPublic class Memory extends Partpublic double getPrice()public double getPrice()return basePrice*0.9;return basePrice*0.9;方法?方法?12/23/201065?采用一个采用一个Price

37、PolicyPricePolicy类,通过对其类,通过对其进行继承以提供不同的计价策略进行继承以提供不同的计价策略更好的方法?更好的方法?12/23/201066Public class PartPublic class Partprivate PricePolicy pricePolicy;private PricePolicy pricePolicy;public void setPricePolicy(PricePolicy policy)public void setPricePolicy(PricePolicy policy)pricePolicy=policy;pricePolic

38、y=policy;public void setPrice(double price)public void setPrice(double price)pricePolicy.setPrice(price);pricePolicy.setPrice(price);public double getPrice()public double getPrice()return pricePolicy.getPrice();return pricePolicy.getPrice();方法方法2010年12月23日8时14分 2003-2004 Microsoft Corporation.All ri

39、ghts reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1212/23/201067Public class PricePolicyPublic class PricePolicyprivate double basePrice;private double basePrice;public void setPrice(double price)public void setPrice(d

40、ouble price)basePrice=price;basePrice=price;public double getPrice()public double getPrice()return basePrice;return basePrice;价格策略价格策略12/23/201068Public class Sale extends PricePolicyPublic class Sale extends PricePolicyprivate double discount;private double discount;public void setDiscount(double p

41、ublic void setDiscount(double discount)discount)this.discount=discount;this.discount=discount;public double getPrice()public double getPrice()return basePrice*discount;return basePrice*discount;销售策略销售策略69Strategy(策略策略):定定义义所所有有支持支持的的算算法的法的公公共共接口接口ConcreteStrategy(具具体体策略策略):实实现现具具体体算算法法Context(上上下下文文

42、):用一个用一个ConcreteStrategy对象来对象来配配置置维护维护一个对一个对Strategy对象的引用对象的引用可可定定义义一个一个接口接口来来让让Strategy访访问问它它的数的数据据70限制限制变化变化的的影响影响范范围围增加增加新新功功能,能,要做要做到到只只增加增加新代新代码码,而,而不不改动改动老老代代码码尽尽量量用用组合组合,而,而不不是是继承继承阶段小结阶段小结设计原则设计原则组合优先组合优先开开-闭闭原则原则封装封装可变可变性性71阶段小结阶段小结策略策略模式模式使得使得算算法法可可以以独独立立变化变化使使用用组合组合取取代代继承继承,封装封装了了可变可变性性,保

43、保证证了“了“开开-闭闭”桥梁桥梁模式模式使得使得抽抽象象和和实实现现独独立立变化变化避免避免了了两两个个变化点变化点的的耦耦合合72Adapter(适配器适配器)模式模式例例子子1:“不不合合适适的的插座插座”你你的的电脑电脑的的插头插头是是三三相相的的而而墙墙上的上的插座插座只有只有两两相相的的插头插头和和插座插座的“的“接口接口”不不匹配匹配,怎怎么么办办?2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes

44、only.Microsoft makes no warranties,express or implied,in this summary.1373Adapter(适配器适配器)模式模式例子例子2:HuntBird游戏中,希望增加一种鸟类游戏中,希望增加一种鸟类“鸭子”“鸭子”但是发现以前有一个系统中已经有了但是发现以前有一个系统中已经有了“鸭子”类,希望重用老代码“鸭子”类,希望重用老代码74Adapter(适配器适配器)模式模式新新老老代代码接口码接口不不一一致致75Adapter(适配器适配器)模式模式疑疑问问把老把老代代码码修改修改一一下下不不就可就可以了以了么?么?如如下下:76Ad

45、apter(适配器适配器)模式模式否否定定首首先先,老老代代码码不不一一定定允允许许修改修改比比如可如可能根本没有代能根本没有代码码,只有,只有链链接接库库其次其次,修改修改代代码码工工作作量量可可能能很很大大容易容易出出错错还记还记得得“开开-闭闭原则”原则”么么77Adapter(适配器适配器)模式模式应应用用(对象对象)适适配器配器模式模式实实现现接口接口转转换换78Adapter(适配器适配器)模式模式客客户户(鸟鸟)被适被适配配者者(鸭鸭子子)适适配器配器请请求求转转换换后后的的请请求求理理解解1:接口接口转转换换2010年12月23日8时14分 2003-2004 Microsof

46、t Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1479Adapter(适配器适配器)模式模式叫叫呷呷叫呷呷叫80Adapter(适配器适配器)模式模式理理解解2:重:重新新包包装装,改变改变接口接口81Adapter(适配器适配器)模式模式类类适适配器配器82Adapter(适配器适配器)模式模式结构结构对象对象Adapter83Adapt

47、er(适配器适配器)模式模式结构结构类类Adapter84Adapter(适配器适配器)模式模式意图意图将将一个一个类类的的接口接口转转换换成成客客户户希望希望的的另另外外一个一个接口接口Adapter模式模式使得使得原本原本由由于于接口接口不不兼兼容容而而不不能一能一起起工工作作的的那那些些类可类可以一以一起起工工作作2010年12月23日8时14分 2003-2004 Microsoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes n

48、o warranties,express or implied,in this summary.1585Adapter(适配器适配器)模式模式应用举例应用举例1我们打算编写一个画图软件我们打算编写一个画图软件其中画圆形已经有了一个现成的类其中画圆形已经有了一个现成的类但是接口不同,不能直接使用但是接口不同,不能直接使用86Adapter(适配器适配器)模式模式使使用对象用对象Adapter87Adapter(适配器适配器)模式模式应应用用举举例例2缺缺省省适适配配模式模式“鲁达剃鲁达剃度度”凡凡是是和和尚尚都都应应该该如如此:此:88Adapter(适配器适配器)模式模式但但是是鲁智深鲁智深并

49、并不不是是这样这样鲁智深鲁智深:习习武武()拳拳打打镇镇关关西西();大大闹闹五台山五台山();倒拔垂杨柳倒拔垂杨柳();火火烧瓦烧瓦官官寺寺();89Adapter(适配器适配器)模式模式所所以以当当初初鲁达剃鲁达剃度度时时,众众僧说僧说:“这这个人个人形形容容丑恶丑恶,相相貌凶顽貌凶顽,不不可可剃剃度度”?90Adapter(适配器适配器)模式模式但但是是长长老老却说却说:“此此人上人上应应天天星星,心心地地刚刚直直。虽虽然然时时下下凶顽凶顽,命命中中驳驳杂杂,久久后后却却得得清清静静。证过证过非非凡凡,汝汝等等皆皆不及不及他他”2010年12月23日8时14分 2003-2004 Mic

50、rosoft Corporation.All rights reserved.This presentation is for informational purposes only.Microsoft makes no warranties,express or implied,in this summary.1691Adapter(适配器适配器)模式模式“天星”就是缺省适配器“天星”就是缺省适配器当你不想当你不想/不能实现接口的所有方法时不能实现接口的所有方法时利用缺省适配器类,提供这些方法的缺省实现利用缺省适配器类,提供这些方法的缺省实现从这个类再派生出的子类就可以不去实现那些从这个类再

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

当前位置:首页 > 应用文书 > 财经金融

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com