里氏替换原则 Liskov Substitution Principle

含义

子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it.

public class Transporter {
    private HttpClient httpClient;
    public Transporter(HttpClient httpClient) {
        this.httpClient = httpClient;
    }
    public Response sendRequst(Request request) {
        // ...use httpClient to send request
    }
}

public class SecurityTransporter extends Transporter {
    private String appId;
    private String appToken;
    
    public SecurityTransporter(HttpClient httpClient, String appId, String appToken) {
        super(httpClient);
        this.appId = appId;
        this.appToken = appToken;
    }

    @Override
    public Response sendRequest(Request request) {
        if(StringUtils.isNotBlank(appId) && StringUtils.isNotBlank
    }
}

里氏替换原则用来指导继承关系中的子类该如何设计,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性

明显违背里氏替换原则:

  1. 子类违背父类声明要实现的功能;
  2. 子类违背对输入,输出,异常的约定;
  3. 子类违背父类注释中所罗列的任何特殊说明。

判断子类的设计实现是否违背里氏替换原则的小窍门:

拿父类的单元测试去测试子类的代码。如果某些单元测试失败了,就有可能说明,子类的设计实现没有完全地遵守父类地约定。

posted @ 2020-03-26 08:05  kendi  阅读(85)  评论(0)    收藏  举报