设计模式设计模式七大原则课件

上传人:无*** 文档编号:241788786 上传时间:2024-07-24 格式:PPT 页数:49 大小:930.50KB
返回 下载 相关 举报
设计模式设计模式七大原则课件_第1页
第1页 / 共49页
设计模式设计模式七大原则课件_第2页
第2页 / 共49页
设计模式设计模式七大原则课件_第3页
第3页 / 共49页
点击查看更多>>
资源描述
时间反复无常,鼓着翅膀飞逝设计模式设计模式七大原则设计模式设计模式七大原则一个例子一个例子GameLogin()Exit()Left()Right()Fire()getUserName()getHighScore()郑州大学软件学院郑州大学软件学院 赵哲赵哲思考问题思考问题这个类中有几个职责?这个类中有几个职责?用户是否登陆的方法跟用户玩游戏的方法用户是否登陆的方法跟用户玩游戏的方法是否有关?是否有关?获得用户信息跟其他两个职责是否有关?获得用户信息跟其他两个职责是否有关?如何优化代码?如何优化代码?郑州大学软件学院郑州大学软件学院 赵哲赵哲优化完成优化完成UML类图类图userStateLogin()Exit()PlayLeft()Right()Fire()userInforgetUserName()getHighScore()内聚高还是低?耦合度呢?内聚高还是低?耦合度呢?郑州大学软件学院郑州大学软件学院 赵哲赵哲开开-闭原则闭原则对扩展开放、对更改封闭对扩展开放、对更改封闭OpenforextensionClosedformodification开放开放-封闭原则是面向对象设计的封闭原则是面向对象设计的核心所在核心所在做一个例子:做一个例子:写个代码片段:写个代码片段:完成对两个数字的加分和减法完成对两个数字的加分和减法郑州大学软件学院郑州大学软件学院 赵哲赵哲开开-闭原则闭原则大部分人的做法:大部分人的做法:若要添加乘法和除法呢?郑州大学软件学院郑州大学软件学院 赵哲赵哲开开-闭原则闭原则OperaterGetResult(a,b)减GetResult(a,b)加GetResult(a,b)符合开闭原则郑州大学软件学院郑州大学软件学院 赵哲赵哲里氏代换原则里氏代换原则Barbara Liskow Barbara Liskow 在在19881988年发表的年发表的19721972年年BarbaraBarbara成为麻省理工学院的教授成为麻省理工学院的教授是美国获得计算机科学博士学位的第一人是美国获得计算机科学博士学位的第一人12郑州大学软件学院郑州大学软件学院 赵哲赵哲里氏代换原则里氏代换原则LiskowSubstitutionPrinciple(LSP):子类必:子类必须能够替换掉它们的父类型须能够替换掉它们的父类型只要是基类出现的地方,一定能够出现子只要是基类出现的地方,一定能够出现子类!类!LSP指导继承,是继承的基石指导继承,是继承的基石龙生龙,凤生凤,老鼠的儿子会打洞。龙生龙,凤生凤,老鼠的儿子会打洞。13郑州大学软件学院郑州大学软件学院 赵哲赵哲LSPLSP例子:例子:一个例子:长方形和正方形一个例子:长方形和正方形某软件某软件 while(长长=宽宽),将宽,将宽+1.父类没问题,但子类就回出现死循环父类没问题,但子类就回出现死循环正方形不可以继承长方形正方形不可以继承长方形14郑州大学软件学院郑州大学软件学院 赵哲赵哲LSPLSP例子例子孙悟空勾掉生死簿中所有猴子的名字,那孙悟空勾掉生死簿中所有猴子的名字,那么猕猴、石猴、长臂猿等的名字是否都勾么猕猴、石猴、长臂猿等的名字是否都勾掉了?掉了?乘马,乘白马、乘骊马乘马,乘白马、乘骊马注意注意LSP反之不成立!反之不成立!墨子墨子 小取小取娣,美人也,爱娣,非爱美娣,美人也,爱娣,非爱美人也人也.盗,人也;恶盗,非恶人也盗,人也;恶盗,非恶人也 15郑州大学软件学院郑州大学软件学院 赵哲赵哲一个例子一个例子郑州大学软件学院郑州大学软件学院 赵哲赵哲依赖依赖虚线普通箭头虚线普通箭头表示依赖表示依赖依赖和关联的区别依赖和关联的区别A和和B关联,关联,A只认识只认识B,知道,知道B的属性和方法,的属性和方法,可以双关联,但不建议使用。可以双关联,但不建议使用。A依赖依赖BB的改变影响的改变影响A的结果。的结果。通常依赖是单向的通常依赖是单向的郑州大学软件学院郑州大学软件学院 赵哲赵哲如果父类的某些方法在子如果父类的某些方法在子类中已经发生畸变,类中已经发生畸变,则建议断开父子关系!则建议断开父子关系!郑州大学软件学院郑州大学软件学院 赵哲赵哲郑州大学软件学院郑州大学软件学院 赵哲赵哲总结总结LSP拒绝子类有自己的个性拒绝子类有自己的个性一旦子类有了一旦子类有了“个性个性”,则与父类之间的,则与父类之间的关系难以调和关系难以调和会让代码的耦合变得扑朔迷离会让代码的耦合变得扑朔迷离郑州大学软件学院郑州大学软件学院 赵哲赵哲依赖倒转原则依赖倒转原则要针对接口编程,不要针对实现编程。要针对接口编程,不要针对实现编程。Programtoaninterface,notanimplementation.高层模块不应该依赖底层模块,两者应该都依赖高层模块不应该依赖底层模块,两者应该都依赖抽象抽象High-levelmoduleshouldnotdependuponbottommodule.bothshoulddependuponabstractions21郑州大学软件学院郑州大学软件学院 赵哲赵哲依赖倒转原则依赖倒转原则减少类之间的耦合度减少类之间的耦合度降低风险降低风险一个例子一个例子司机开车司机开车Driverdriver(Benz bz)BenzRun()郑州大学软件学院郑州大学软件学院 赵哲赵哲依赖倒转原则依赖倒转原则司机还要开宝马,如何实现?司机还要开宝马,如何实现?增加宝马类,但是需要修改司机类增加宝马类,但是需要修改司机类BMWRun()Driverdriver(Benz bz)driver(BMW bmw)BenzRun()郑州大学软件学院郑州大学软件学院 赵哲赵哲如何解决如何解决针对接口编程针对接口编程郑州大学软件学院郑州大学软件学院 赵哲赵哲实现场景代码:实现场景代码:张三开奔驰张三开奔驰IDriver张张3=newDriver();ICarbenz=newBenz();张张3.driver(benz);郑州大学软件学院郑州大学软件学院 赵哲赵哲练习练习最初:最初:光明农场养牛光明农场养牛扩展:扩展:多种牛场、喂养多种动物多种牛场、喂养多种动物最初类图如下,按照依赖倒转原则画出正最初类图如下,按照依赖倒转原则画出正确类图确类图光明农场光明农场Feed(Cow c)Cow郑州大学软件学院郑州大学软件学院 赵哲赵哲接口隔离原则接口隔离原则InterfaceSegregationPrincipleISP客户端不应该依赖它不需要的方法客户端不应该依赖它不需要的方法类间的依赖关系应该建立在最小的接口上类间的依赖关系应该建立在最小的接口上 郑州大学软件学院郑州大学软件学院 赵哲赵哲一个例子一个例子一个接口:内容是雇佣者有吃饭和做工作一个接口:内容是雇佣者有吃饭和做工作的方法的方法雇佣的男、女都可以使用该接口雇佣的男、女都可以使用该接口有一天,雇佣者来了一个机器人。有一天,雇佣者来了一个机器人。机器人不吃饭机器人不吃饭郑州大学软件学院郑州大学软件学院 赵哲赵哲例子例子 -错误错误InterfaceIWorkervoideat();voidwork();ClassWorker:IWorkerpublicvoideat()/eat相关代码相关代码publicvoidwork()/work相关代码相关代码29郑州大学软件学院郑州大学软件学院 赵哲赵哲ISPISP例子的缺陷例子的缺陷胖接口,造成了对接口的污染胖接口,造成了对接口的污染如何解决?如何解决?客户端不应该依赖它不需要的方法客户端不应该依赖它不需要的方法 类间的依赖关系应该建立在最小的接口上类间的依赖关系应该建立在最小的接口上 一个接口只做一件事一个接口只做一件事30郑州大学软件学院郑州大学软件学院 赵哲赵哲例子例子-符合符合ISPInterfaceIWorkerEatvoideat();InterfaceIWorkerWorkvoidwork();ClassWorker:IWorkerEat,IWorkerWorkpublicvoideat()/eat相关代码相关代码publicvoidwork()/work相关代码相关代码ClassRobot:IWorkerWorkpublicvoidwork()/work相关代码相关代码面向接口编程,而非实现编程面向接口编程,而非实现编程31郑州大学软件学院郑州大学软件学院 赵哲赵哲ISPISP胖接口容易导致哑方法胖接口容易导致哑方法瘦接口更健康!瘦接口更健康!32郑州大学软件学院郑州大学软件学院 赵哲赵哲合成合成/聚合复用原则聚合复用原则Composite/AggregateReusePrincipleCARP合成和聚合合成和聚合合成合成是强烈的关联,部分是强烈的关联,部分(将将)和整体和整体(主主)生生命周期一样,整体命周期一样,整体(主主)对部分对部分(将将)有支配权,有支配权,包括创建和销毁。包括创建和销毁。聚合聚合是部分和整体的普通关联是部分和整体的普通关联郑州大学软件学院郑州大学软件学院 赵哲赵哲合成和聚合合成和聚合刘邦和韩信刘邦和韩信34郑州大学软件学院郑州大学软件学院 赵哲赵哲CARPCARP原则原则合成:合成:classPersonprivateHandhand;publicPerson()hand=newHand();35郑州大学软件学院郑州大学软件学院 赵哲赵哲CARPCARP原则原则聚合:聚合:classPersonprivateComputercomputer;privateAa;publicsetComputer()computer=newComputer();publicsetA()a=newa();36郑州大学软件学院郑州大学软件学院 赵哲赵哲CARPCARP原则原则尽量使用合成尽量使用合成/聚合,而不是使用继承聚合,而不是使用继承 继承的优点继承的优点新的实现较为容易,因为基类的大部分功能新的实现较为容易,因为基类的大部分功能可以通过继承的关系自动进入子类。可以通过继承的关系自动进入子类。修改和扩展继承而来的实现较为容易。修改和扩展继承而来的实现较为容易。继承的缺点继承的缺点继承将基类的实现细节暴露给子类。称继承将基类的实现细节暴露给子类。称“白白箱箱”复用。复用。如果基类发生改变,那么子类的实现也不得如果基类发生改变,那么子类的实现也不得不发生改变。不发生改变。多继承不利于维护多继承不利于维护37郑州大学软件学院郑州大学软件学院 赵哲赵哲CARP特点特点优点:优点:依赖少,条条框框的限制少依赖少,条条框框的限制少几乎可以用到任何环境中几乎可以用到任何环境中容易实现容易实现修改和扩展容易修改和扩展容易缺点:缺点:对象多,需要管理对象多,需要管理38郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特原则迪米特原则TheLawofDemeterLoD不要和陌生人说话不要和陌生人说话又叫又叫最少知识原则最少知识原则小国寡民,邻国相望,鸡犬之声相闻,民小国寡民,邻国相望,鸡犬之声相闻,民至老死,不相往来至老死,不相往来郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特法则迪米特法则一个对象应当对其他对象有尽可能少的了一个对象应当对其他对象有尽可能少的了解解,不和陌生人说话不和陌生人说话最少知识、不相往来最少知识、不相往来talkonlytoyourimmediatefriends建议多使用建议多使用Private和和Protect,而少使用,而少使用public40郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特法则迪米特法则41郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特法则的优点迪米特法则的优点相当弱的类耦合相当弱的类耦合利于复用利于复用只要有可能类就可以设计成不变类只要有可能类就可以设计成不变类42郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特法则的缺点迪米特法则的缺点造成大量的小方法,散落在系统的各个角造成大量的小方法,散落在系统的各个角落落这些方法仅仅是传递间接的调用这些方法仅仅是传递间接的调用容易引起第一次了解系统人的困惑容易引起第一次了解系统人的困惑43郑州大学软件学院郑州大学软件学院 赵哲赵哲迪米特法则和设计模式迪米特法则和设计模式Faade模式和模式和Mediator模式都符合迪米特法模式都符合迪米特法则则44郑州大学软件学院郑州大学软件学院 赵哲赵哲总结总结泛化、依赖、关联、聚合、组合泛化、依赖、关联、聚合、组合泛化泛化(继承继承)classAclassB:A依赖:依赖:classApublicvoidFunction(Bb)classB郑州大学软件学院郑州大学软件学院 赵哲赵哲关联关联classABb=newB();classB聚合聚合classABb=newB();Cc=newC();classBclassC郑州大学软件学院郑州大学软件学院 赵哲赵哲合成合成classAPublicA()Bb=newB();classB聚合和合成的区别:生命周期。聚合和合成的区别:生命周期。合成中,随着合成中,随着A类的生命周期结束,类的生命周期结束,B也结束。也结束。必须在必须在A类里面使用。类里面使用。聚合中,随着聚合中,随着A类的生命周期结束,类的生命周期结束,B,C不一定不一定结束。结束。郑州大学软件学院郑州大学软件学院 赵哲赵哲总结总结7大原则大原则单一职责原则单一职责原则开开-闭原则闭原则里氏代换原则里氏代换原则依赖倒转原则依赖倒转原则接口隔离原则接口隔离原则合成合成/聚合复用原则聚合复用原则迪米特原则迪米特原则郑州大学软件学院郑州大学软件学院 赵哲赵哲56、书不仅是生活,而且是现在、过去和未来文化生活的源泉。库法耶夫57、生命不可能有两次,但许多人连一次也不善于度过。吕凯特58、问渠哪得清如许,为有源头活水来。朱熹59、我的努力求学没有得到别的好处,只不过是愈来愈发觉自己的无知。笛卡儿60、生活的道路一旦选定,就要勇敢地走到底,决不回头。左拉
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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