- 在线时间
- 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) 8 \4 W$ F+ m- m, [) ^! W3 U$ D
$ g: h) Y# H0 N# T& E8 A% M* M* z! l F# D
使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。
4 a' R; _- |5 r; A; ^) s; u* V6 j1 m* O) `7 Q& m# \9 e
, b" F5 W6 J" P2 Y1 X. h" ]
[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]
$ S; \% K3 x- f& Q* ?* `" L) S4 Y" D5 @2 e
; v9 y4 F) e8 r; r6 C$ o4 c
Liskov替换法则
3 K2 V6 q6 L/ X v
0 |( ?/ ^% L% l& C7 l, J
# Z4 A3 D3 @ O( E* ~# `1.显而易见,Liskov替换法则(LSP)是根据我所熟知的"多态"而得出的。 % y8 {# D# Z2 C# Q- r& l
, u+ d2 h7 c: F# |4 v$ l2 ]( r. P# |4 L$ Y
2.例如:
6 K+ }2 y# ]2 U# D
+ X! A) c4 F: z7 w
2 V- r: i7 p9 u5 `5 Y方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,则该方法可与任何实现了Sharp接口的类一起工作)
. N4 j* q" x. `: I9 K- U
* U3 s9 @4 L1 Y4 P3 ~) x# c# }: ]9 L' A" h
但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。
; z4 z& Q( l- d6 |7 |! O* U& _. e/ y3 Q
% M4 e# W5 }5 k; P7 `1 q* p4 j
6 r( C; T+ R' }/ J/ I: ^; F
, ~, l$ N d! d& M7 `4 h
& E/ F3 G( A, p* s& S$ Y$ L 3.若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。
l2 q* w3 C. o8 \3 f" T" Q" Y$ x- \- B0 c* S
3 \3 U b, S) y
这样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。! H7 R9 H8 E* ?# ?) X. h$ _3 M
6 k& d% u/ m- _9 B
. ?/ n0 T0 }5 k$ w2 E>>更多一些面向对象得设计法则(4) |
zan
|