- 在线时间
- 3 小时
- 最后登录
- 2024-1-13
- 注册时间
- 2009-9-8
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 16 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 5
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   0% 该用户从未签到
 |
法则4:Liskov替换法则(LSP)
# b- N, h8 ?! U$ S/ u7 C7 p7 I9 I* K/ T- n3 v, a
( Z N( r! W$ @' C5 a9 X
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 , C) p: N+ _" R/ m- X3 w% r
' K/ V/ p% C- \% H/ C$ a1 E; c
5 j( K7 I8 @. o- U8 N7 K4 C8 V1 X) a8 X$ K
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
5 g- K5 C- c3 `8 T1 r7 t
: {$ d: o7 Y5 |: y, m7 L$ h3 y' I+ w/ c
Liskov替换法则
8 Y( }' ^) p' I i
( \- Y3 x6 R6 f
& F) E1 @% Y5 [8 E4 E8 r1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。
- ] n# V8 [! ]( R5 P+ B) i) W2 t9 e6 C3 L E, ~8 z$ z( Q
# I. U5 P- r- k# Y( y" [, Y2.例如: & e& q3 x% B( m& Z' w4 }$ }
+ d5 @% w; J* g. \) n' D6 m
5 q/ v- ?8 _% f/ C& q) N/ t
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
' ?9 @8 _. W# n P; b1 V. ]0 \ l5 c5 ?9 A& M& ]7 z8 o
/ |5 J8 D! ]; c/ ]$ G* g. W% o 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 5 M+ A& d- M& g, t6 e& P7 [& z m
. H4 H+ [0 o( N D
- |9 g7 J" g; \; O; ` @
# ^% p& I: y% Y0 ]& J e, M% M7 J( g1 Q7 S1 g7 Z& O
7 G" i) B8 _) ]# s: F1 h
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
, X8 C0 l; G0 Z- i9 X7 L6 ]& K
2 T7 P# h0 i! e" b/ `
0 I" ?% G; j" L' \' b这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。- i& g# x0 [2 |# J
; _2 I2 U; ]3 L# j
( o, v' V* \, X8 Q/ P, C>>更多一些面向对象得设计法则(4) |
zan
|