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

wonkju 2012-11-02 12:16:28


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()方法。
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonkju 2012-11-03
  • 打赏
  • 举报
回复
谢谢额,这位大哥··
JPF1024 2012-11-03
  • 打赏
  • 举报
回复
======================大概意思,可以参考========


public interface Strategy {  //策略
public int calculate(int a,int b);
}
这是一个接口,它里面只有方法,没有具体的实现。 你必须先调用setXXX(),才能给变量赋值,否则怎么能用呢? 不过你的加减乘除何不放在一个类里面做成4个方法?看起来也方便,也利于后期的维护。
JPF1024 2012-11-03
  • 打赏
  • 举报
回复

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;
}

}



看看代码
石头和风 2012-11-03
  • 打赏
  • 举报
回复
bu dong
wonkju 2012-11-02
  • 打赏
  • 举报
回复
都没有人回答我,是不是我的问题好菜鸟哈

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧