在线时间 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)
* i7 g2 N5 F9 B1 r$ G, o
6 q6 \- s; X3 q# ?/ h
9 `. q$ Y3 B4 U# e 使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 8 i- _/ I |2 i5 x1 @
' X9 M. [' u$ S $ i" t o7 J! s- x1 O; \' d
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] 5 l; T) r/ I% M0 [
$ K! v0 B. I" S, m* `
" i: V/ A+ n% [+ P Liskov替换法则
9 C" v( n9 x$ r8 S ! o+ ?# b4 X. y; _7 C3 S% k# W
5 H$ z E# i5 J4 C$ n 1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 2 a& h; ^( }, O0 V
9 p& x" v4 N9 i+ O& V
8 \- g6 n% w0 G* A" A* f 2.例如:
2 a; a* P! D/ e2 g
4 b$ @: z# @; k3 g ; }; w8 _- A2 j) B; a4 A- Z
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) ( u' E$ A3 m. n+ x4 J2 ]
' K! |2 Q& {9 d
5 [" @# W& N2 t0 Z; i1 C+ ~9 [ 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 . G0 ~% Z3 a3 j; s+ D
7 G0 M) T) T$ P
! l* `$ ?( q1 Z# F9 r# p2 l
1 R3 Z. g! G8 v+ O1 u
9 }4 S4 G) E# r R5 L: q5 M % z/ Z' X) q* H w+ w$ K
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
! k( Z$ w; ]' I& B) i
l2 B+ `* `9 I0 g 6 y$ K, l) U2 z* a+ s4 m& w4 M
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
5 X5 D5 h7 @4 k" C, `1 ^( S
. f1 ?! r& Y# }
; D* A6 i1 U* T/ g >>更多一些面向对象得设计法则(4)
zan