浅析面对对象 六大原则(三)

1.单一职责原则点击跳转
2.开闭原则点击跳转

3.里氏替换原则(构建扩展性更好的系统)

里氏替换原则英文全称是Liskow Substitution Principle(LSP),里氏替换原则有两种定义方式,第一种定义方式为,如果对于每一个类型为X的对象X1,都有类型为Y的对象Y1,使得所有使用类型为Y的程序P在把对象Y1替换成X1时,程序的行为没有发生变化,那么,类型X是类型Y的子类。第二种定义比较简单易懂,所有引用基类的地方必须能透明的使用其子类的对象。
大家都知道,面对对象语言的三大特点是封装、继承和多态,里氏替换原则就是依赖其中的继承和多态两大特点。里氏替换原则简单来说,就是在一个系统中,在需要用的地方可以使用子类来替换掉父类,这样并不影响系统的行为,但是,子类不可被父类替换,毕竟子类是继承父类实现的,父类的属性和方法可以继承到,但是子类还是有自己独特的方法的。所以,可以再把这个这种形式的在细说下,就是抽象。
下面以一个实例来看下里氏替换原则:
首先,大家都知道在Android中Window和View的关系,是依赖的(不是接口的依赖),而我们所知道的大部分View,如Button,TextView等都是继承自View的,这些View而且又是多种多样的,他们和View有共用的方法,但是绘制起来确实千变万化,而且,这些View都可以给Window设置展示,先看下UML类图,如下

这里写图片描述

那么看下代码是怎么实现的:
//窗口列
public class Window{
    public void show(View view){
    view.draw();
    }
}


//建立视图抽象类,测量视图的宽高是共用代码,而具体的绘制过程交给子类实现
public abstract class View{
    public abstract void draw();
    public void measure(int width,int height){
    //测量视图的宽高
    }
}

//Button类的实现
public class Button extends View{
    public void draw(){
        //绘制按钮
    }
}

//TextView类的实现
public class TextView extends View{
    public void draw(){
        //绘制文本
    }
}
综上可以看出,在OOP中,继承的优缺点相当的明显。

优点:

(1)代码的重用性,减少创建类的成本,但可以拥有父类的属性和方法
(2)子类与父类基本类似,但又有些区别
(3)可以提高代码的可扩展性

缺点:

(1)继承是具有入侵性的,只要我继承了父类,不管用的到的还是用不到的方法和属性,都会被沿用下来
(2)造成子类代码冗余,灵活性降低。
事物都是具有两面性的,如何权宜利弊要根据实际情况来判定选择,里氏替换原则指导我们构建更好的可以扩展的系统,但是我们还是要根据自己的实际需求来判断在适当的时候使用不同的规则,这样才会使自己的系统更加完善更加健壮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值