一些面向对象的设计法则 学习笔记

一些面向对象的设计法则 Bob Tarr

Favor Composition Over Inheritance

组合的优点

         容器类仅能通过被包含对象的接口来对其进行访问。

         对装性好。

         实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少)

组合的缺点

         从而导致系统中的对象过多。

         必须仔细地对接口定义

继承

         将父类的实现细节暴露给子类

         易于修改或扩展那些被复用的实现。

判断标准:

         继承:     “是一个…的特殊类型”,

         组合:“是一个由…所扮演的角色”,或者 has  a

         如乘客只是Person所扮演的一种角色,则在Person中组合乘客。

        

Program To An Interface, Not An Implementation

接口的优点:

         可以被另一个对象替换

         增加了重用的可能

接口的缺点:

         设计的复杂性略有增加

接口表示“…像…”(LikeA)的关系,继承表示“…是…”(IsA)的关系,组合表示“…有…”(HasA)的关系

 

Software Entities Should Be Open For Extension, Yet Closed For Modification

         对扩展开放,对修改封闭,算是设计软件的一种原则吧,比较抽象

单选法则(the Single Choice Principle

         无论在什么时候,一个软件系统必须支持一组备选项,理想情况下,在系统中只能有一个类能够知道整个的备选项集合。

替换法则(LSP

         以基类做参数的函数,当传入派生类对象也可以使用,也就是不需要向下转型。

         用于区分不该用的继承

   为了保持LSP(并与开放-封闭法则一起),所有子类必须符合使用基类的client所期望的行为。

         一个子类型不得具有比基类型(base type)更多的限制,可能这对于基类型来说是合法的,但是可能会因为违背子类型的其中一个额外限制,从而违背了LSP

         LSP保证一个子类总是能够被用在其基类可以出现的地方!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值