想问个不是很明白的问题!

wonkju wonkju 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


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()方法。
...全文
评论 5
收藏 已收藏
分享
返回顶部
wonkju
Java SE 62,620 成员 307,251 内容