当前位置: 首页 > news >正文

郑州网站制作电话seo优化首页

郑州网站制作电话,seo优化首页,中国建筑官网电话,重庆森林电影简介文章目录 一. 如何理解“里式替换原则”#xff1f;二. 哪些代码明显违背了 LSP#xff1f;三. 回顾 一. 如何理解“里式替换原则”#xff1f; 子类对象能够替换程序中父类对象出现的任何地方#xff0c;并且保证原来程序的逻辑行为不变及正确性不被破坏。 里氏替换原则… 文章目录 一. 如何理解“里式替换原则”二. 哪些代码明显违背了 LSP三. 回顾 一. 如何理解“里式替换原则” 子类对象能够替换程序中父类对象出现的任何地方并且保证原来程序的逻辑行为不变及正确性不被破坏。 里氏替换原则例子如下 //1. 父类 Transporter 使用 HttpClient 来传输网络数据。 //2. 子类 SecurityTransporter 继承父类 Transporter增加了额外的功能 //支持传输 appId 和 appToken 安全认证信息。 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(/*省略参数*/););从刚刚的例子和定义描述来看里式替换原则跟多态看起来确实有点类似但实际上它们完全是两回事。 先改造下程序改造成多态 //改造前如果appId 或者 appToken 没有设置我们就不做校验 //改造后如果 appId 或者 appToken 没有设置则直接抛出NoAuthorizationRuntimeException 未授权异常。 // 改造前 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);} }从设计思路上来讲SecurityTransporter 的设计是不符合里式替换原则的因为它改变了父类原有的规则我们接下来讨论里氏替换中协议的具体含义。 二. 哪些代码明显违背了 LSP 里式替换原则还有另外一个更加能落地、更有指导意义的描述那就是“Design By Contract”中文翻译就是“按照协议来设计”。 具体说明一下 子类在设计的时候要遵守父类的行为约定或者叫协议。父类定义了函数的行为约定那子类可以改变函数的内部实现逻辑但不能改变函数原有的行为约定。这里的行为约定包括函数声明要实现的功能对输入、输出、异常的约定甚至包括注释中所罗列的任何特殊说明。实际上定义中父类和子类之间的关系也可以替换成接口和实现类之间的关系。 如下几个违反里式替换原则的例子来说明约定的含义 1.子类违背父类声明要实现的功能 父类中提供的 sortOrdersByAmount() 订单排序函数是按照金额从小到大来给订单排序的而子类重写这个 sortOrdersByAmount() 订单排序函数之后是按照创建日期来给订单排序的。那子类的设计就违背里式替换原则。 2.子类违背父类对输入、输出、异常的约定那子类的设计就违背里式替换原则如下 在父类中运行出错的时候返回 null获取数据为空的时候返回空集合empty collection。而子类重载函数之后实现变了运行出错返回异常exception获取不到数据返回 null。在父类中某个函数约定输入数据可以是任意整数但子类实现的时候只允许输入数据是正整数负数就抛出也就是说子类对输入的数据的校验比父类更加严格在父类中某个函数约定只会抛出 ArgumentNullException 异常那子类的设计实现中只允许抛出 ArgumentNullException 异常任何其他异常的抛出。 3.子类违背父类注释中所罗列的任何特殊说明 父类中定义的 withdraw() 提现函数的注释是这么写的“用户的提现金额不得超过账户余额……”而子类重写 withdraw() 函数之后针对 VIP 账号实现了透支提现的功能也就是提现金额可以大于账户余额那这个子类的设计也是不符合里式替换原则的。 三. 回顾 里式替换原则是用来指导继承关系中子类该如何设计的一个原则。 理解里式替换原则最核心的就是理解“design by contract按照协议来设计”这几个字。父类定义了函数的“约定”或者叫协议那子类可以改变函数的内部实现逻辑但不能改变函数原有的“约定”。这里的约定包括函数声明要实现的功能对输入、输出、异常的约定甚至包括注释中所罗列的任何特殊说明。 参考《设计模式之美》–王争
http://www.dnsts.com.cn/news/43546.html

相关文章:

  • 宿州酒店网站建设做推广的网站带宽需要多少合适
  • 友情链接是在网站后台做吗wordpress 豆瓣
  • 网页设计代码中字体的颜色如何改合肥推广优化公司
  • 景区网站模板成都营销策划公司排行榜
  • 政务公开和网站建设先进个人企业网页申请制作步骤
  • 网页升级访问站软件开发文档清单
  • 东莞h5网站开发林州网站建设策划
  • 设计免费素材网站网站制作需要多少钱一年
  • 宁波网站建设服务公司电huaui作品集 网站怎么做
  • 设计师应该看的网站电子商务网站开发的目的是什么
  • dede中英文企业网站让wordpress文章页面显示分类标签
  • 徐州祥云做网站好用的小程序推荐
  • alexa网站排名wordpress 分类目录导航
  • 视屏网站的审核是怎么做的什么网站可以做试卷
  • 梧州做网站湖北手机网站建设
  • 玉环网站制作海南网站建设平台
  • 郑州做商城网站西安最新招聘信息
  • 正能量不良网站直接进入app开发工具简单
  • 罗田网站建设wordpress cms 制作
  • 给网站添加代码南京中如建设公司
  • 企业网站网上推广的途径合肥专门做网站
  • 我们做网站 出教材 办育心经app开发团队公司
  • 福州做网站的公司多少钱网站素材包括哪些
  • 网站索引怎么做电子商务 网站建设
  • 昆山市建设局网站6网站添加flash
  • 如何建设网站济南兴田德润o团队怎么样小程序设计软件
  • 网站的基本价格wordpress模板文件命名
  • 从零开始网站建设学校网站织梦源码
  • 淮北专业网站建设wordpress 共享
  • 商丘网站建设推广渠道手机百度网址是什么