- 在线时间
- 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)
6 U+ g+ v1 l" g1 `
5 F. W4 P* G) s* q
/ S9 I) c% G6 j2 L( }使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。
4 o! g1 [7 D# T7 H8 m' g
+ D% Z2 h/ |$ `1 R1 W
1 p" N: n: h; _ [ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
# z9 p0 C8 g2 I( e9 k, P3 n
+ l: _' ?4 H+ J& v* x- g. M* w- V, y
& _) o% t& B {$ zLiskov替换法则 / c" K1 Q, }& h$ y# B7 G
/ y/ K) L9 I& }3 p4 d8 y; L7 ?- Y6 R, K" `
1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 ) S1 V) G8 k' P9 B w1 t; ?
6 T) K, r+ b7 Y
[" g1 q4 r1 h2 E( I4 j6 ?6 f
2.例如:
) j. ]6 T z: }+ C4 @: R
7 {& O/ Q' l8 \9 m0 t5 y0 a5 h5 n" W: W4 q7 ~$ ~" P' g
方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作) / X. N" u8 U! s
# ^9 s5 L( R% y) M9 q2 \
( r! [% ?, Z4 @- x 但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。 + q, R! a4 c) F3 o
1 X* u- G3 N( D# d
6 }$ q* M2 U/ l, x+ E8 |3 Z3 } $ Q) z4 p3 K7 f* c
+ ~# C+ O, m, z+ {5 h3 V7 e) Y* P1 p3 p- m9 d; t1 R+ M9 z! Z
3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
1 y6 v3 p; {4 q# @* u. y9 G# e$ ~, i. Q9 t; e( @( q2 v
, v: J- @1 B. X F9 }5 b3 r% U这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。7 h/ x5 \" P1 r" y3 u! H
" @: a# t" n9 a
+ ?4 |. X& g% `% T
>>更多一些面向对象得设计法则(4) |
zan
|