考虑变化的和不变化的部分,一个类的的行为或者或者方法在运行时改变。 例如两个数字的运算,方法入参都是两个参数运行方法不同。ide
参考下面诸葛亮使用解囊解决问题。this
定义一个接口,表示两个数的运算(方法)。code
public interface Strategy { public int doOperation(int num1, int num2); }
两种不一样的实现方法(解决方法有 锦囊一和锦囊二)。接口
public class OperationAdd implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 + num2; } }
public class OperationSubstract implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 - num2; } }
定义使用某一种运算方法的类(诸葛亮,它可使用锦囊1解决也可使用锦囊二解决)io
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); } }
建立一个诸葛亮当遇到问题1两个数的加法的时候,诸葛亮使用锦囊一。当遇到两个数的减法的时候,诸葛亮使用锦囊二。class
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)); } }