设计模式-OOD的设计原则(2)-"里氏代换原则"
来源:互联网 发布:mac 硬盘 只读 编辑:程序博客网 时间:2024/04/28 00:16
- 创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题.
- 从B到A的继承关系改为委派关系.
为了说明,我们先用第一种方法来看一个例子,第二种办法在另外一个原则中说明.我们就看那个著名的长方形和正方形的例子.对于长方形的类,如果它的长宽相等,那么它就是一个正方形,因此,长方形类的对象中有一些正方形的对象.对于一个正方形的类,它的方法有个setSide和getSide,它不是长方形的子类,和长方形也不会符合LSP.
那么,如果让正方形当做是长方形的子类,会出现什么情况呢?我们让正方形从长方形继承,然后在它的内部设置width等于height,这样,只要width或者height被赋值,那么width和height会被同时赋值,这样就保证了正方形类中,width和height总是相等的.现在我们假设有个客户类,其中有个方法,规则是这样的,测试传人的长方形的宽度是否大于高度,如果满足就停止下来,否则就增加宽度的值.现在我们来看,如果传人的是基类长方形,这个运行的很好.根据LSP,我们把基类替换成它的子类,结果应该也是一样的,但是因为正方形类的width和height会同时赋值,这个方法没有结束的时候,条件总是不满足,也就是说,替换成子类后,程序的行为发生了变化,它不满足LSP.
那么我们用第一种方案进行重构,我们构造一个抽象的四边形类,把长方形和正方形共同的行为放到这个四边形类里面,让长方形和正方形都是它的子类,问题就OK了.对于长方形和正方形,取width和height是它们共同的行为,但是给width和height赋值,两者行为不同,因此,这个抽象的四边形的类只有取值方法,没有赋值方法.上面的例子中那个方法只会适用于不同的子类,LSP也就不会被破坏.
在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承.如果从继承等级树来看,所有叶子节点应当是具体类,而所有的树枝节点应当是抽象类或者接口.当然这个只是一个一般性的指导原则,使用的时候还要具体情况具体分析.
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- 设计模式-里氏代换原则
- 设计模式六大原则:里氏代换原则
- 设计模式六大原则--里氏代换原则
- 设计模式六大原则(2):里氏代换原则
- 设计模式——里氏代换原则
- 设计模式(一):里氏代换原则
- java设计模式_里氏代换原则
- 设计模式之里氏代换原则
- 大话设计模式----里氏代换原则
- 【有毒的设计模式】单一指责原则、开放-封闭原则、依赖倒转原则、里氏代换原则
- 设计模式六大原则(二)里氏代换原则
- 设计模式 依赖倒转原则 & 里氏代换原则
- 大话设计模式05----依赖倒转原则 & 里氏代换原则
- 如何在软件工程/管理中骗分
- 记博客开通
- 自己写的一个UBB转换的函数
- 死缠烂打追女孩,你见过这样的吗?
- 文件对话框读写文本文件[VC]
- 设计模式-OOD的设计原则(2)-"里氏代换原则"
- servlet.jar 2.4下载?
- 上海四金和税的算法
- 2005-6-28修改内容
- 如何把Collection结果集显示成下拉菜单
- BT种子文件格式
- 软件工程之需求分析(转载)
- db2常用操作笔记
- 快速上手Spring--3. 加载Bean的配置文件