想问个不是很明白的问题!
package com.strategytest;
public class Environment { // 环境角色
private Strategy strategy;
public Environment(Strategy strategy) {
// TODO Auto-generated constructor stub
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int calculate(int a,int b) {
return strategy.calculate(a, b);
}
}
public interface Strategy { //策略
public int calculate(int a,int b);
}
public class AddStrategy implements Strategy { //加法策略
@Override
public int calculate(int a,int b) {
// TODO Auto-generated method stub
return a + b;
}
}
public class SubstractStrategy implements Strategy { //减法策略
@Override
public int calculate(int a, int b) {
// TODO Auto-generated method stub
return a - b;
}
}
public class MultiplyStrategy implements Strategy { //乘法策略
@Override
public int calculate(int a, int b) {
// TODO Auto-generated method stub
return a * b;
}
}
public class DivideStrategy implements Strategy { //除非策略
@Override
public int calculate(int a, int b) {
// TODO Auto-generated method stub
return a / b;
}
}
我想问的问题是:
策略模式中,有三个角色:抽象策略角色 、具体策略角色 、环境角色。
上面是 “环境角色”
然后我好奇怪的是,为什么用完一次具体策略角色,要改变成其他的才能用,即使用 setXX()方法改变才能用,
我的想法是,既然 Strategy 是 AddStrategy 、SubstractStrategy 、MultiplyStrategy 和 DivideStrategy的接口,那么Environment中接受 AddStrategy 、SubstractStrategy 、MultiplyStrategy 和 DivideStrategy 的Strategy类型后能向上转型,像多态那样,为什么还要用setXX()方法。
...全文


Java SE
