设计模式之策略模式

it2022-05-05  130

策略模式:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变更,不会影响到算法的用户

 

 策略模式代码结构

//策略或者算法的接口 public interface Strategy { public void AlgorithmInterface(); } //多种具体的策略或者算法 public class ConcreteStrategyA implements Strategy{ public void AlgorithmInterface() { //实现细节A } } public class ConcreteStrategyB implements Strategy{ public void AlgorithmInterface() { //实现细节B } } public class ConcreteStrategyC implements Strategy{ public void AlgorithmInterface() { //实现细节C } } //持有策略对象的上下文 public class Context { Strategy strategy; //初始上下文时传入具体的策略对象 public Context (Strategy strategy) { this.strategy = strategy; } //调用策略对象方法提供服务 public void contextInterface() { strategy.AlgorithmInterface(); } } //客户端调用 public class Main{ public static void main(String[] args) { Context context; //根据需求建立持有不同策略的上下文,能得到不同策略下的结果 context = new Context(new ConcreteStrategyA()); context.contextInterface(); context = new Context(new ConcreteStrategyB()); context.contextInterface(); context = new Context(new ConcreteStrategyC()); context.contextInterface(); } }

 

策略模式适用于动态改变对象行为的场景,如商场结算(正常结算、打X折、满XX减YY等不同结算方式),出游方式(汽车、火车、飞机等不同交通工具),通过把行为抽象成公共接口,实现由具体算法执行。

策略模式不仅使算法代码得以重用,对客户端新的需求只需提供新的算法实现,无需修改源代码,满足OCP原则,而且简化了单元测试,因为每个算法都有自己的类,只需要完成对本身算法的测试即可。对服务端而言,也减少了业务逻辑与算法实现的耦合。

策略模式还可以与简单工厂模式结合,把对算法的选择实现转移到工厂当中,减轻客户端的职责

转载于:https://www.cnblogs.com/gdut-chj/p/7756203.html

相关资源:各显卡算力对照表!

最新回复(0)