Java Design Patterns

一.创建接口

public interface Strategy {public int doOperation(int num1, int num2);}

二.创建具体的实现类,实现Stratery接口

public class OperationAdd implements Strategy{@Overridepublic int doOperation(int num1, int num2) {return num1 + num2;}}

public class OperationSubstract implements Strategy {@Overridepublic int doOperation(int num1, int num2) {return num1 - num2;}}
public class OperationMultiply implements Strategy{@Overridepublic int doOperation(int num1, int num2) {return num1 * num2;}}

三.创建Context 类,也即环境类

持有一个具体策略的对象构造函数,传入一个具体策略对象策略方法

public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public int executeStrategy(int num1, int num2){return strategy.doOperation(num1, num2);}}

四.Use the Context to see change in behaviour when it changes its Strategy

public class StrategyPatternDemo {public static void main(String[] args) {Context context = new Context(new OperationAdd());System.out.println("10 + 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationSubstract());System.out.println("10 - 5 = " + context.executeStrategy(10, 5));context = new Context(new OperationMultiply());System.out.println("10 * 5 = " + context.executeStrategy(10, 5));}}

五.输出结果:

10 + 5 = 1510 - 5 = 510 * 5 = 50

=========================================================================

这个模式涉及到三个角色:

  ●  环境(Context)角色:持有一个Strategy的引用。

  ●  抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

  ●  具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

更多参考资料:

1) 英文原文:点击打开链接

2)《JAVA与模式》之策略模式 TODO文章很好,此模式是什么,为什么用它,如何使用,现实业务中具体应用,代码,以及优缺点都很详细. 3)Java源码分析 – 策略模式在Java集合框架实现代码中的体现点击打开链接

在Java的集合框架中,构造Map或者Set时传入Comparator比较器,或者创建比较器传入Collections类的静态方法中作为方法的参数为Collection排序时,都使用到了策略模式。

每一幢房子都有一种不同的颜色,

Java Design Patterns

相关文章:

你感兴趣的文章:

标签云: