使用策略模式重构 if/elseif/elseif

Posted waynaqua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用策略模式重构 if/elseif/elseif相关的知识,希望对你有一定的参考价值。

本文翻译自国外论坛 medium,原文地址:https://medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539


策略设计模式是一种允许在运行时选择算法的行为。这种模式

  • 定义了一系列算法
  • 封装每种算法
  • 使算法在该系列内可互换。

下面是策略设计模式的架构,客户端将在其中与上下文进行通信。上下文将包含对策略对象的引用,这反映了另一个设计原则 “针对接口而非实现编程”

让我们检查一下如何使用以下场景重构旧式 if else 语句。

这种设计的问题在于,每当我们需要添加或修改任何传输方式时,它总是会影响业务逻辑的实现。

让我们使用策略设计模式重构紧密耦合的代码。

客户端代码如下所示

优点:

  1. 添加新策略不会干扰之前的任何代码。
  2. 移除/重构之前的任何策略都是灵活的。
  3. 易于单一测试。

关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!

JavaScript条件语句和循环语句

1.条件语句

(1).if...else

if(判断条件){

语句1

}else{

语句2

}

(2).if...else if....else

if(判断条件){

语句1

}else if(判断条件){

语句2

}else{

语句3

}

(3).if

if(判断条件){

}

if...else if....else和if...else每次只会执行一个语句,执行后就会跳出语句。

2.循环语句

循环语句常用的有do...while和for和while与for in。

所有的循环语句只要满足循环条件,就会一直执行,直到满足条件。

(1).do...while语句

语法:

do

{

语句1

}while(循环条件)

var v = 0;

var a = 0;

do

{

a+=v;

v++;

}while(i<=100)

注:如果不在do循环了加上v++;那么这就是一个死循环,所以do...while容易形成死循环。

(2).while语句

语法:

while(循环条件)

{

}

while语句和do...while类似,唯一不同的是while先执行判断条件在执行语句,所以while循环里的语句最少会执行零次而do...while最少会执行一次。

(3).for语句

语法:

for(初始表达式;循环条件;操作表达式)

{

语句1

}

var v =0;

for(i=0;i>100;i++)

{

v+=i;

}

注:for语句不容易形成死循环,因为它有一个操作表达式。

(4).for in

注:for in只能对数组和对象循环,for in不会形成死循环。

语法:

for(变量名 in 数组)

{

语句1

}

 

以上是关于使用策略模式重构 if/elseif/elseif的主要内容,如果未能解决你的问题,请参考以下文章

基础题

PHP之流程控制

JavaScript条件语句和循环语句

JS流程控制语句

为啥我的函数 if/else if/else if 语句返回相同的答案?

如何将if / else if转换为循环