IIRC,Liskov替代原则 1)假定一个人应该能够用任何派生类替换一个类; 也就是说,派生类的行为不应与其基类的行为完全不同,或违反它们的基类设置的合同.
显然,这个原则对一个(基类)类如何被另一个类(从它派生)"重用"有意限.其他使用类的方法,例如聚合或组合,因此不受该原理的限制.
1)参见例如Liskov替代原则(链接到PDF文档).
使用继承来实现代码重用会遇到以下问题:
您无法在运行时更改重用的行为.继承是一个编译时依赖项,因此如果一个GameClient类继承TCPSocket来重用connect()和write()成员函数,它就具有硬编码的TCP功能.您无法在运行时更改此设置.
为了进行测试,您无法从外部替换重用的行为.如果一个GameClient类继承TCPSocket而得到write()(用于将数据写入套接字),则无法从外部交换此代码.您无法插入另一个write()函数,该函数会记录GameClient要写入文件的所有数据.
除了最简单的应用程序之外,您依赖于多重继承.这为钻石形状的继承树打开了大门,这大大增加了代码的复杂性.
优先考虑继承的组合以重用代码可以避免所有这些问题.
| 归档时间: |
|
| 查看次数: |
8699 次 |
| 最近记录: |