您的位置:首页 > 移动开发 > Android开发

android设计模式之里氏代换原则(LSP)

2014-04-29 10:45 183 查看
定义

里氏代换原则(Liskov Substitution Principle,常缩写为LSP)。里氏代换原则由Barbara Liskov提出。

里氏代换原则的严格表达是:

如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。

换言之,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。

反过来的代换不成立

如果一个软件实体使用的是一个子类的话,那么它不一定适用于基类。

Java语言对里氏代换的支持

在编译时期,Java语言编译器会检查一个程序是否符合里氏代换,当然这是一个无关实现的、纯语法意义仁的检查。

里氏代换要求凡是基类型使用的地方,子类型一定适用,因此子类必须具备基类型的全部接口。或者说,子类型的接口必须包括全部的基类型的接口,而且还有可能更宽。如果一个Java程序破坏这一条件,Java编译器就会给出编译时期错误。

可是,Java编译器不能检查一个系统在实现和商业逻辑上是否满足里氏代换法则。

代码重构

里氏代换原则讲的是基类与子类的关系。只有当这种关系存在时,里氏代换关系才存在;反之则不存在。如果有两个具体类A和B之间的关系违反了里氏代换原则的设计,根据具体情况可以在下面的两种重构方案中选择一种:

(1)创建一个新的抽象类C,作为两个具体类的超类,将A和B的共同行为移动到C中,从而解决A和B行为不完全一致的问题.

<2)从B到A的继承关系改写为委派关系

参考:java与模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: