- 在线时间
- 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) - r$ Z8 V/ g2 y: a+ ]% T" K
2 ]) u$ i/ R/ v$ I/ A- u
3 ?# G, r$ ^! z+ l使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。 9 m9 ?* v* {; w( K5 D+ R+ m9 u/ S
* N; Q; Z) k2 X% n( X
4 ]! V N$ I6 W [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
1 w/ w6 Z" ~. _9 F: u/ S% `: D; D# t9 v" R( E$ t$ f' r
% S4 D! {4 z0 V
Liskov替换法则
( V; A: M! ^5 I- a) }$ ~2 T }: J; s9 }2 j3 ]
" H" T) Q0 ~( \6 k6 s& {
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 3 _* u4 W# h0 j' Y' \4 A: X5 Z
& U0 x3 _6 O& q0 [; K1 ~
2 W6 U1 X; ^) \9 w9 \) N3 w2.例如: ' `4 f( s/ [4 H. i
1 e$ _" n8 v' r4 [! T/ N0 @! C" z3 H- Q
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) ! D \* ~5 ?5 K+ C
8 S! H6 c; ?% o1 {+ Q) L7 I5 x
+ A+ e* H6 @1 Y Q2 \( Z 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。
1 W8 T G$ c. p5 f" u3 i% s( l6 A/ h5 ^0 e
$ L6 ~$ v( Y, r& [8 N+ D; |" }& f ! o9 g: C3 S. s+ w& d- p
0 f2 t1 W. V' W* U% E, h9 @7 @
( x) `% Q* @5 ^, y/ T 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
; {& ?8 i$ S4 C" }8 F3 {3 U6 q( I/ n) ]; a
9 p: l q, K$ v) ]' z/ R这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。
4 G% l% X9 R% f9 H$ o' O: R W
4 W* y: C( x0 e: U3 e
6 n" R: Y0 c3 [0 x4 Y! M>>更多一些面向对象得设计法则(4) |
zan
|