这次我想谈谈策略设计模式 。 通过这种方式,我开始撰写有关行为设计模式的文章。 这些模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。
当您的应用程序中有多个实现目的的实现时,应使用该策略。 在这种情况下,您将创建策略接口,接口的具体实现以及最终一个上下文类,该上下文类将以某些方法封装所有逻辑。 为了理解这种方法,让我们看一个例子。
该示例将基于足球。 让我们想象一下,任何一支足球队都能以两种方式比赛:进攻和防守。 这两种策略是足球策略的特殊实现。
策略界面:
public interface FootballStrategy {public void adhereTactic(String team);}
具体实现:
public class AttackTactic implements FootballStrategy {@Overridepublic void adhereTactic(String team) {System.out.println(team+" will play in attacking football!");}}
和
public class DefenceTactic implements FootballStrategy {@Overridepublic void adhereTactic(String team) {System.out.println(team+" will make emphasis on defence!");}}
上下文类:
public class TacticContext {private FootballStrategy strategy = null;public void selectTactic(String team) {strategy.adhereTactic(team);}public FootballStrategy getStrategy() {return strategy;}public void setStrategy(FootballStrategy strategy) {this.strategy = strategy;}}
演示策略用法:
...public static void main(String[] args) {String team1 = "Barcelona";String team2 = "Real Madrid";TacticContext context = new TacticContext();context.setStrategy(new AttackTactic());context.selectTactic(team1);context.setStrategy(new DefenceTactic());context.selectTactic(team2);}
...
代码执行的结果:
巴塞罗那将踢足球!
皇马会强调防守!
何时使用策略设计模式? 绝对是当客户不需要了解具体策略的实施或那里使用的数据时。 当您要动态使用集合中的一个类时。 我不知道现在还需要提及哪些情况。 但是我确信我的例子很冗长,您可以对策略设计模式的优缺点做出自己的结论。
参考: 设计模式: JCG合作伙伴 Alexey Zvolinskiy的策略,来自Fruzenshtein的注释博客。
翻译自: https://www.javacodegeeks.com/2013/06/design-patterns-strategy.html