༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻

第五原则:里氏替换原则

        所有基类出现的地方必定能被子类替换,且功能不发生影响

例子:构造函数中参数基类出现的地方

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第1张图片

在主类中可以被子类替换,且不改变功能

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第2张图片

我们在编写代码时要带有里氏替换原则的思想编写,考虑子类在继承基类时后期可不可以完全替换基类且不改变功能的要求,

也就是每次使用继承时,想想到底该不该继承,

虽然我们有override重写方法,就算继承了也可以使用override选择实不实现功能,但是会造成代码污染,比如:

我们扩展一个Brush(笔刷类) 继承 Graohics(画图工具),在基类方法是 virtual类型时 ,使用override可以选择子类是否实现

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第3张图片

再扩展一个油漆桶类,考虑到油漆桶没有描边功能,可以用override不进行代码编写,但这样就出现了代码污染,

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第4张图片

所以我们可以考虑不使用继承,也就不会出现 空重写 的代码污染,

空重写的出现即使我们使用了该函数也不会有什么作用,所以属于代码污染,

再不使用继承时,我们可以把 油漆桶 和 笔刷 功能放在 画图工具类里,让工具类Graphics拥有 油漆桶 和 笔刷 这两个功能

也就是说应该:

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第5张图片

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第6张图片

༺༽༾ཊ—设计-七个-05-原则-模式—ཏ༿༼༻_第7张图片

End

你可能感兴趣的:(c#,1024程序员节,设计模式)