(50)--14-5 面向对象设计原则 接口隔离原则 面向对象与UML.pdf

上传人:奉*** 文档编号:96641193 上传时间:2024-02-01 格式:PDF 页数:21 大小:618.78KB
返回 下载 相关 举报
(50)--14-5 面向对象设计原则 接口隔离原则 面向对象与UML.pdf_第1页
第1页 / 共21页
(50)--14-5 面向对象设计原则 接口隔离原则 面向对象与UML.pdf_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《(50)--14-5 面向对象设计原则 接口隔离原则 面向对象与UML.pdf》由会员分享,可在线阅读,更多相关《(50)--14-5 面向对象设计原则 接口隔离原则 面向对象与UML.pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 面向对象与面向对象与UML Object-Oriented and UML 面向对象设计原则面向对象设计原则 Object-Oriented Design Principles -3-3-面向对象的基本设计原则面向对象的基本设计原则(1)LSP:Liskov(里氏里氏)替换原则替换原则 Liskov Substitution Principle(2)OCP:开放:开放-封闭原则封闭原则 Open-Close Principle(3)SRP:单一职责原则:单一职责原则 Single Responsibility Principle(4)ISP:接口隔离原则:接口隔离原则 Interface S

2、egregation Principle (5)DIP:依赖倒置原则:依赖倒置原则 Dependency Inversion Principle(6)CARP:组合组合/聚合复用原则聚合复用原则 Composite/Aggregate Reuse Principle(7)LOD(LKP):迪米特法则迪米特法则(最少知道原则最少知道原则)Law of Demeter(Least Knowledge Principle)ISP(Interface Segregation Principle)接口隔离原则接口隔离原则 ISP接口隔离原则定义接口隔离原则定义 Clients should not be

3、 forced to depend upon interfaces that they do not use.客户不应该依赖他们用不到的方法,只给客户它所需要的接口。客户不应该依赖他们用不到的方法,只给客户它所需要的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。换句话说,使用多个专门的接口比使用单一的总接口要好。实例实例1 1-电子商务系统中的订单处理电子商务系统中的订单处理 某电子商务网站中有关“订单”处理的设计方案某电子商务网站中有关“订单”处理的设计方案 三种使用订单的场合三种使用订单的场合(1)外部用户外部用户可以通过可以通过门户网站门户网站查询订单(查询订单(getOrd

4、er)。)。(2)公司员工公司员工可以通过可以通过前台系统前台系统增加订单(增加订单(insertOrder)。)。(3)管理员管理员可以通过可以通过管理后台管理后台进行维护,包括订单的增加(进行维护,包括订单的增加(insertOrder)、删除(删除(deleteOrder)、修改()、修改(modifyOrder)、查询()、查询(getOrder)操作。)操作。如何设计订单的访问接口?如何设计订单的访问接口?实例实例1 1-违背违背ISPISP的设计方案的设计方案 此设计中存在的问题:此设计中存在的问题:门户网站、前台系统并不门户网站、前台系统并不使用使用IOrder接口中的全部接口中

5、的全部方法。方法。因此客户依赖了他所不因此客户依赖了他所不需要的接口,违背了需要的接口,违背了ISP.设计设计订单访问接口订单访问接口IOrder,该接口提供订单类对外的所有操作,该接口提供订单类对外的所有操作,订单类订单类Order来实现这些接口。来实现这些接口。实例实例1 1-解决方案解决方案 遵循遵循ISPISP的设计方案,分离接口。的设计方案,分离接口。客户程序只依赖与自己所需的接口,避免了接口污染。客户程序只依赖与自己所需的接口,避免了接口污染。使用多重继承使用多重继承(实现实现)分离接口分离接口 ISP接口隔离原则分析接口隔离原则分析 接口隔离原则是指接口隔离原则是指使用多个专门的

6、接口,而不使用单一的总接口使用多个专门的接口,而不使用单一的总接口。每一个接口应该承担一种相对独立的角色,不多不少,不干不该每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。干的事,该干的事都要干。(1)(1)一一个接口就个接口就只代表一个角色只代表一个角色,每个角色都有它特定的一个接口,每个角色都有它特定的一个接口,此时这个原则可以叫做“角色隔离原则”。此时这个原则可以叫做“角色隔离原则”。(2)(2)接口接口仅仅提供客户端需要的行为,即所需的方法,客户端不需仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接

7、口,要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。而不要提供大的总接口。ISP接口隔离原则分析接口隔离原则分析 使用接口隔离原则拆分接口时,首先必须满足使用接口隔离原则拆分接口时,首先必须满足单一职责原则单一职责原则,将,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。接口中的方法越少越好。可以在进行系统设计时采用可以在进行系统设计时采用定制服务定制服务的方式,即的方式,即为不同的客户端为不同的客户端提供宽窄不同的接口提供宽窄不同的接口,只提供用户需要的行为,而隐藏用户不需

8、,只提供用户需要的行为,而隐藏用户不需要的行为。要的行为。实例实例2违背违背ISP接口隔离原则接口隔离原则 下图展示了一个拥有多个客户类的系统,在系统中定义了一个巨大的下图展示了一个拥有多个客户类的系统,在系统中定义了一个巨大的接口接口AbstractService来服务所有的客户类。来服务所有的客户类。ClientA只使用只使用AbstractService接口中的接口中的opeatorA方法。方法。ClientB只使用只使用AbstractService接口中的接口中的opeatorB方法。方法。ClientC只使用只使用AbstractService接口中的接口中的opeatorC方法。

9、方法。:void:void:voidoperatorC()operatorB()operatorA()+ConcreteServiceClientCClientB:void:void:voidoperatorC()operatorB()operatorA()+AbstractServiceClientA 实例实例2 2-解决方案解决方案-遵循遵循ISP接口隔离原则接口隔离原则 :voidoperatorC()+AbstractServiceC:voidoperatorB()+AbstractServiceB:void:void:voidoperatorC()operatorB()operato

10、rA()+ConcreteServiceClientCClientB:voidoperatorA()+AbstractServiceAClientA接口分离后的设计方案接口分离后的设计方案 ISP 接口隔离原则本质接口隔离原则本质(1)使用多个专门的接口比使用单一的接口好,避免接口污染)使用多个专门的接口比使用单一的接口好,避免接口污染(Interface Pollution)。(2)一个类对另一个类的依赖性应当是建立在最小的接口上的。)一个类对另一个类的依赖性应当是建立在最小的接口上的。-也也体现了迪米特法则(最少知道原则)体现了迪米特法则(最少知道原则)接口隔离原则的启示接口隔离原则的启示

11、(1)接口的设计原则接口的设计原则:接口的设计应该遵循:接口的设计应该遵循最小接口最小接口原则,原则,不要把用不要把用户不使用的方法塞进同一个接口里。户不使用的方法塞进同一个接口里。如果一个接口的方法没有被使用到,则说明该接口过胖,应该将其如果一个接口的方法没有被使用到,则说明该接口过胖,应该将其分割成几个功能专一的接口。分割成几个功能专一的接口。(2)接口的依赖(继承)原则)接口的依赖(继承)原则:如果一个:如果一个接口接口A继承另一个继承另一个接口接口B,则,则接接口口A相当于继承了相当于继承了接口接口B的方法,此时建立继承关系后的的方法,此时建立继承关系后的接口接口A包含了用户包含了用户

12、不使用的方法不使用的方法,则说明则说明接口接口A被被接口接口B给污染了,应该重新设计它们的关给污染了,应该重新设计它们的关系。系。实例实例3门与报警器门与报警器 假如有一个门假如有一个门Door,有,有lock,unlock功能,另外,可以在功能,另外,可以在Door上安装上安装一个报警器一个报警器Alarm而使其具有报警功能。用户可以选择一般的而使其具有报警功能。用户可以选择一般的Door,也可以选择具有报警功能的也可以选择具有报警功能的Door。有四种设计方案,是否都符合有四种设计方案,是否都符合ISP接口隔离原则接口隔离原则?实例实例1 1门与报警器门与报警器设计方案设计方案1 1 在在

13、Door接口里定义所有的方法,接口里定义所有的方法,CommonDoor和和AlarmDoor都都实现实现Door接口。接口。依赖依赖Door接口的接口的CommonDoor却不得不实现未使用的却不得不实现未使用的alarm方法。方法。设计违反了设计违反了ISP原则。原则。实例实例1门与报警器门与报警器设计方案设计方案2 在在Alarm接口定义接口定义alarm方法,在方法,在Door接口定义接口定义lock,unlock方法,方法,Door接口接口继承继承Alarm接口。接口。和设计方案和设计方案1一样,依赖一样,依赖Door接口的接口的CommonDoor却不得不实现未使用的却不得不实现未

14、使用的alarm方法。方法。设计违反了设计违反了ISP原则原则。接口接口Door被接口被接口Alarm给污给污染了。染了。实例实例1门与报警器门与报警器设计方案设计方案3 在在Alarm接口定义接口定义alarm方法,在方法,在Door接口定义接口定义lock,unlock方法。方法。接口之间无继承关系。接口之间无继承关系。CommonDoor实现实现Door接口。接口。AlarmDoor有有2种实现方案:种实现方案:1)同时实现)同时实现Door和和Alarm接口。接口。2)继承)继承CommonDoor,并实现,并实现Alarm接口。接口。该方案是继承该方案是继承方式的方式的Adapter

15、设计设计模式的实现。模式的实现。该方案更具实该方案更具实用性。用性。设计遵循了设计遵循了ISP设计原则设计原则 实例实例1 1门与报警器门与报警器设计方案设计方案4 4 通过委托实现通过委托实现 此方案是此方案是委托方式的委托方式的Adapter设计模式设计模式的实现。的实现。AlarmDoor实现了实现了Alarm接口,同时把功能接口,同时把功能lock和和unlock委让给委让给CommonDoor对象完成。对象完成。设计设计遵循了遵循了ISP设计原则设计原则。ISP接口隔离原则对其它原则的影响接口隔离原则对其它原则的影响 如果用户被迫依赖他们不使用的接口,当接口发生改变时,他们也不如果用

16、户被迫依赖他们不使用的接口,当接口发生改变时,他们也不得不跟着改变。得不跟着改变。换而言之,一个用户依赖了未使用但被其他用户使用的接口,当其他换而言之,一个用户依赖了未使用但被其他用户使用的接口,当其他用户修改该接口时,依赖该接口的所有用户都将受到影响。这显然违用户修改该接口时,依赖该接口的所有用户都将受到影响。这显然违反了反了开闭原则开闭原则,也不是我们所期望的。,也不是我们所期望的。违反了接口隔离原则,也就可能违反了开闭原则。违反了接口隔离原则,也就可能违反了开闭原则。小结小结 准确而恰当地划分角色以及角色所对应的接口,是面向对象设计的一准确而恰当地划分角色以及角色所对应的接口,是面向对象设计的一个重要组成部分;个重要组成部分;每个接口都代表一个角色,因此将角色区分清楚是系统设计的一个重每个接口都代表一个角色,因此将角色区分清楚是系统设计的一个重要工作。一个符合逻辑的推断,不应将几个不同的角色都交给同一个要工作。一个符合逻辑的推断,不应将几个不同的角色都交给同一个接口,而应交给不同的接口。接口,而应交给不同的接口。将没有关系的接口合并在一起,形成一个臃肿的大接口,是对角色和将没有关系的接口合并在一起,形成一个臃肿的大接口,是对角色和接口的污染。接口的污染。本章小结本章小结

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

当前位置:首页 > 教育专区 > 大学资料

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

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