您的位置:首页 > 游戏 > 游戏 > 做网站建设的公司有哪些_手机排行榜中关村_网络营销试卷_网站平台做推广

做网站建设的公司有哪些_手机排行榜中关村_网络营销试卷_网站平台做推广

2024/11/16 4:29:42 来源:https://blog.csdn.net/c_studer_/article/details/143609505  浏览:    关键词:做网站建设的公司有哪些_手机排行榜中关村_网络营销试卷_网站平台做推广
做网站建设的公司有哪些_手机排行榜中关村_网络营销试卷_网站平台做推广

假如我们有一段代码,有很多的if else

function executeAction(type) {if (type === 'A') {console.log('Action A');} else if (type === 'B') {console.log('Action B');} else if (type === 'C') {console.log('Action C');} else {console.log('Unknown action');}
}executeAction('A'); // 输出: Action A
executeAction('B'); // 输出: Action B
executeAction('C'); // 输出: Action C
executeAction('D'); // 输出: Unknown action

如果if else有很多很多, 那么代码就会变的非常不直观且难以维护

那对于这种情况有什么好的解决办法吗
这就引出了我们今天的主角: 策略模式

什么是策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它允许你定义一系列算法或行为,并将它们封装在独立的策略类中。然后,你可以根据需要在运行时选择不同的策略。这种模式特别适合处理复杂的条件逻辑,比如多个 if-else if 语句。

下面来看使用策略模式的解决方案

我们可以将每个条件分支封装在一个策略类中,然后在运行时选择合适的策略。

// 定义策略接口
class Strategy {execute() {throw new Error('You have to implement the method execute!');}
}// 具体策略A
class StrategyA extends Strategy {execute() {console.log('Action A');}
}// 具体策略B
class StrategyB extends Strategy {execute() {console.log('Action B');}
}// 具体策略C
class StrategyC extends Strategy {execute() {console.log('Action C');}
}// 默认策略
class DefaultStrategy extends Strategy {execute() {console.log('Unknown action');}
}// 策略上下文
class Context {constructor() {this.strategies = {'A': new StrategyA(),'B': new StrategyB(),'C': new StrategyC()};}executeAction(type) {const strategy = this.strategies[type] || new DefaultStrategy();strategy.execute();}
}// 使用策略模式
const context = new Context();
context.executeAction('A'); // 输出: Action A
context.executeAction('B'); // 输出: Action B
context.executeAction('C'); // 输出: Action C
context.executeAction('D'); // 输出: Unknown action

策略接口 (Strategy): 定义了一个 execute 方法,所有具体的策略类都必须实现这个方法。

具体策略类 (StrategyA, StrategyB, StrategyC, DefaultStrategy): 每个类都实现了 execute 方法,执行特定的操作。

策略上下文 (Context): 维护一个策略对象的映射,并根据传入的 type 选择合适的策略来执行。如果没有找到对应的策略,则使用默认策略。

使用策略模式: 通过 Context 类的 executeAction 方法来执行不同的策略。

这样实现有哪些好处

可扩展性: 如果需要添加新的策略,只需添加一个新的策略类,并在 Context 中注册即可,无需修改现有代码。

代码清晰: 将复杂的条件逻辑分解到不同的策略类中,使代码更易于理解和维护。

灵活性: 可以在运行时动态地选择不同的策略,而不需要修改代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com