六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

软件设计之里氏代换原则

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-27 05:07:02 | 显示全部楼层 |阅读模式
里氏代换原则:<span style="font-size: 14pt;" />
<span style="font-size: small;">              一个软件实体如果使用一个基类的话,那么一定适用于其子类,而且这根本不能察觉出基类对象和子类对象的区别。
<span style="font-size: small;">       里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正的被复用,而衍生类也才能够在基类的基础上增加新的行为。
 
       Java语言对里氏代换原则的支持<span style="font-family: Times New Roman;">:
<span style="font-size: small;">              里氏代换原则要求凡是基类型使用的地方,子类型一定适用,因此子类型必须具备基类型的全部接口。或者说,子类型的接口必须包括全部的基类型的接口,而且还有可能更宽。如果一个java程序破坏这一条件,JAVA编译器会给出编译时错误。
 
Java语言对里氏代换原则支持的局限:
      JAVA<span style="font-size: small;">编译器不能检查一个系统在实现和商业逻辑上是否满足里氏代换。
 
<span style="font-size: small;">里氏代换原则在设计模式中的体现:
1.       <span style="font-size: small;">策略模式:策略模式的策略间的互换性是对里氏代换原则的遵守。
2.       <span style="font-size: small;">合成模式:里氏代换原则是合成模式能够成立的基础。
3.       <span style="font-size: small;">代理模式:代理模式能够成立的关键,就在于代理模式与真实主题模式都是抽象主题角色的子类。
 
 
<span style="font-size: small;">从代码重构角度看里氏代换原则:
<span style="font-size: small;">       里氏代换原则讲的是基类与子类的关系,只有当这种关系存在时,里氏代换原则才存在,反之不存在。假设有AB两个类违反了里氏代换原则的设计,可以使用下面2种重构方案找选择一种处理:
1.       <span style="font-size: small;">创建一个新的抽象类C,作为两个具体类的超类,将AB的共同行为移动到C中,从而解决AB行为不完全一致的问题。
2.       BA的继承关系改写为委派关系。<span style="" />
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表