里式替换原则定义:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有对象O1都替换成O2时,程序P的行为没有任何变化。
面向对象的三大特点是继承封装和多态,里式替换原则就是依赖于继承和多态这两大特性。里式替换原则通俗点就是说,只要父类出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或者一场。
我们来看下window和View的关系,写一下示例代码帮助理解:
/**
*创建View抽象类
*/
public abstract class View
{
public abstract void draw();
public void measure(int width,int heigth){
//测量视图大小
}
}
/**
*各种控件继承View来具体实现,不仅仅局限于一下两种控件
*/
public class Button extends View{
public void draw();
}
public class TextView extends View{
public void draw();
}
/**
*创建窗口类将View显示在屏幕上,这里使用View对象
该类中任何继承了View类的对象都可以当参数,传递给show方法
*/
public class Windows{
public void show(View child)
{
child.draw()
}
}
通过里式替换就可以自定义各种各样的View,然后传递给Window,Window负责组织View,并将View显示在用户屏幕上。我们来想一下上两篇文章的例子,MemoryCache、DiskCache、DoubleCache都可以替换ImageCache的工作,并且能够保证行为的正确性。这也是运用了里式替换原则。开闭原则和里式替换原则是生死相依,不离不弃的,通过里式替换来达到对扩展开放,对修改关闭的效果。这两个原则都同时强调了一个重要特性--抽象。因此开发过程中抽象是走向代码优化的重要一步。
网友评论