设计原则之--里氏代换原则
发布时间:2020-12-13 20:05:57 所属栏目:百科 来源:网络整理
导读:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出其子类对象和基类对象的区别。 里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正的被复用,而衍生类才可能够在基
一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出其子类对象和基类对象的区别。
里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正的被复用,而衍生类才可能够在基类的基础上增加新的行为。
但是反过来不成立。
java对里氏代换的支持:
在编译时期,java语言编译器会检查一个程序是否符合里氏代换,当然这是一个无关实现的、纯语法意义上的检查。里氏代换要求凡是基类型使用的地方,子类型一定适用,因此子类必须具备积累性的全部接口。或者说子类型的接口必须包括全部的基类型的接口,而且还有可能更宽。如果一个java程序破坏这一条件,java编译器就会给出编译时期错误。
在设计模式中的体现:
代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理模式能够成立的关键,就是代理模式与真实主题模式都是抽象主题角色的子类,客户端只知道抽象主题,而代理模式可以替代抽象主题出现在任何需要的地方,而将真实主题隐藏在幕后。代理模式的简略类图如下:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vue-content-loader内容加载器的使用方法
- 21.Which three statements are true about logical struct
- flash – NetStream.appendBytes
- 正则表达式 – 为什么** / *用于递归搜索当前目录:vimgrep
- 使用单一方法获取功能Java流中的主要因素?
- 学习React系列1-React-tutorial全解析
- JSONP跨域,实现cookies共享
- 开发板2440nor flash与nand flash启动的简单比较
- XML中二进制数据的处理方法
- ruby-on-rails – rails / activerecord中的预处理语句