网站开发学哪些,wordpress不显示网站标题,网站搭建服务器配置,成都网站建设优化前十定义:子类对象能够替换程序中父类对象出现的任何地方#xff0c;并且*保证原来程序的逻辑行为不变及正确性不被破坏*。
public class Transporter {private HttpClient httpClient;public Transporter(HttpClient httpClient) {this.httpClient httpClient;}public Response…定义:子类对象能够替换程序中父类对象出现的任何地方并且*保证原来程序的逻辑行为不变及正确性不被破坏*。
public class Transporter {private HttpClient httpClient;public Transporter(HttpClient httpClient) {this.httpClient httpClient;}public Response sendRequest(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;}Overridepublic Response sendRequest(Request request) {if (StringUtils.isNotBlank(appId) StringUtils.isNotBlank(appToken)) {request.addPayload(app-id, appId);request.addPayload(app-token, appToken);}return super.sendRequest(request);}
}public class Demo { public void demoFunction(Transporter transporter) { Reuqest request new Request();//...省略设置request中数据值的代码...Response response transporter.sendRequest(request);//...省略其他逻辑...}
}// 里式替换原则
Demo demo new Demo();
demo.demofunction(new SecurityTransporter(/*省略参数*/););与多态的区别多态可以改变父类的正确性例如
// 改造前
public class SecurityTransporter extends Transporter {//...省略其他代码..Overridepublic Response sendRequest(Request request) {if (StringUtils.isNotBlank(appId) StringUtils.isNotBlank(appToken)) {request.addPayload(app-id, appId);request.addPayload(app-token, appToken);}return super.sendRequest(request);}
}// 改造后
public class SecurityTransporter extends Transporter {//...省略其他代码..Overridepublic Response sendRequest(Request request) {if (StringUtils.isBlank(appId) || StringUtils.isBlank(appToken)) {throw new NoAuthorizationRuntimeException(...);}request.addPayload(app-id, appId);request.addPayload(app-token, appToken);return super.sendRequest(request);}
}说明:改造后的代码改变了源代码的正确性使结果出现了多种可能