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

集团网站建设行业现状/抖音引流推广一个30元

集团网站建设行业现状,抖音引流推广一个30元,益阳在线官网,企业营销方案案例范文重构函数调用-Separate Query from Modifier将查询函数和修改函数分离四 1.将查询函数和修改函数分离 1.1.使用场景 某个函数既返回对象状态值,又修改对象状态。建立两个不同的函数,其中一个负责查询,另一个负责修改。 1.2.如何做 新建一…

重构函数调用-Separate Query from Modifier将查询函数和修改函数分离四

1.将查询函数和修改函数分离

1.1.使用场景

某个函数既返回对象状态值,又修改对象状态。建立两个不同的函数,其中一个负责查询,另一个负责修改。

1.2.如何做

  • 新建一个查询函数,令它返回的值与原函数相同。
  • 观察原函数,看它返回什么东西。如果返回的是一个临时变量,找出临时变量的位置。
  • 修改原函数,令它调用查询函数,并返回获得的结果。
  • 原函数中的每个return句都应该像这样:return newQuery(),而不应该返回其他东西。
  • 如果调用者将返回值赋给了一个临时变量,你应该能够去除这个临时变量。
  • 编译,测试。
  • 将调用原函数的代码改为调用查询函数。然后,在调用查询函数的那一行之前,加上对原函数的调用。每次修改后,编译并测试。
  • 将原函数的返回值改为void,并删掉其中所有的return语句。

1.3.示例

有这样一个函数:一旦有人入侵安全系统,它会告诉我入侵者的名字,并发送一个警报。如果入侵者不止一个,也只发送一条警报:

  String foundMiscreant(String[] people){for (int i = 0; i < people.length; i++) {if (people[i].equals ("Don")){sendAlert();return "Don";}if (people[i].equals ("John")){sendAlert();return "John";}}return "";}

该函数被下列代码调用:

  void checkSecurity(String[] people) {String found = foundMiscreant(people);someLaterCode(found);}

为了将查询动作和修改动作分开,我首先建立一个适当的查询函数,使其与修改函 数返回相同的值,但不造成任何副作用:

   String foundPerson(String[] people){for (int i = 0; i < people.length; i++) {if (people[i].equals ("Don")){return "Don";}if (people[i].equals ("John")){return "John";}}return "";}

然后,我要逐一替换原函数内所有的return语句,改调用新建的查询函数。每次替换后,编译并测试。这一步完成之后,原函数如下所示:

  String foundMiscreant(String[] people){for (int i = 0; i < people.length; i++) {if (people[i].equals ("Don")){sendAlert();return foundPerson(people);}if (people[i].equals ("John")){sendAlert();return foundPerson(people);}}return foundPerson(people);}

现在,我要修改调用者,将原本的单一调用动作替换为两个调用:先调用修改函数,然后调用查询函数

  void checkSecurity(String[] people) {foundMiscreant(people);String found = foundPerson(people);someLaterCode(found);}

所有调用都替换完毕后,我就可以将修改函数的返回值改为void:

  void foundMiscreant (String[] people){for (int i = 0; i < people.length; i++) {if (people[i].equals ("Don")){sendAlert();return;}if (people[i].equals ("John")){sendAlert();return;}}}

现在,为原函数改个名称可能会更好一些

  void sendAlert (String[] people){for (int i = 0; i < people.length; i++) {if (people[i].equals ("Don")){sendAlert();return;}if (people[i].equals ("John")){sendAlert();return;}}}

当然,这种情况下,我得到了大量重复代码,因为修改函数之中使用了与查询函数相同的代码。现在我可以对修改函数实施Substitute Algorithm (139),设法让它再简洁一些:

  void sendAlert(String[] people){if (! foundPerson(people).equals(""))sendAlert();}

并发问题
如果你在一个多线程系统中工作,肯定知道这样一个重要的惯用手法:在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier (279)互相矛盾呢?我曾经和Doug Lea讨论过这个问题,并得出结论:两者并不矛盾,但你需要做一些额外工作。将查询动作和修改动作分开来仍然是很有价值的。但你需要保留第三个函数来同时做这两件事。这个“查询—修改”函数将调用各自独立的查询函数和修改函数,并被声明为synchronized。如果查询函数和修改函数未被声明为synchronized,那么你还应该将它们的可见范围限制在包级别或private级别。这样,你就可以拥有一个安全、同步的操作,它由两个较易理解的函数组成。这两个较低层函数也可以用于其他场合。

http://www.jmfq.cn/news/4989133.html

相关文章:

  • 网站制作报价大约/关键词自动优化
  • 网站结构优化包括哪些/怎么做链接推广产品
  • 邹平建设网站/百度seo排名优
  • 余姚做网站/网站推广的方式有哪些?
  • 做全国家电维修网站到哪里做/百度快照投诉中心
  • 成都做小程序哪个服务最好/seo营销怎么做
  • 应聘的做网站推广的/今日国内重大新闻
  • 温州集团网站建设公司/公司网站如何推广
  • 鸡西城乡建设局网站/网站维护需要多长时间
  • 关于网站开发的步骤/查询网入口
  • 网站做反向代理后样式加载错误/企业网络推广平台
  • 大丰做网站/百度竞价排名事件分析
  • 网站建设明细报价表/投广告哪个平台好
  • 门户网站后台管理系统模板/网络推广营销软件
  • 可以自己做网站的软件/seo文章优化方法
  • 开一个设计工作室需要什么/福州短视频seo网红
  • h5网站设计报价/网络营销策划书2000字
  • 邢台网站建设平台/怎样和政府交换友链
  • 玉溪做网站建设的公司/竞价广告是怎么推广的
  • 网站微信付款调用/楚雄百度推广电话
  • 专业做公司宣传网站的/关键词排名点击软件怎样
  • 佛山专业网站建设/重庆网站制作公司
  • 南阳市做网站/信息互联网推广
  • 如何低成本做网站推广/北京seo关键词排名优化
  • wordpress 定时/什么是网站seo
  • 哪个网站可以做片头/网站怎么做优化排名
  • 网站建设如何网络销售/搜索引擎培训班
  • 网页广告素材/黑帽seo优化
  • 网站建设价位/广州谷歌推广
  • 桂林有哪些做网站的电话/百度一下下载安装