【发布时间】:2016-11-21 13:52:41
【问题描述】:
在下面的代码中基本上是三个 3 主要类
- 1个实现Operation接口的类
- 2 扩展自 Context 类的类
- 3 演示策略模式的主类
所以我的问题是,这种策略模式如何应用在这段代码中
操作界面
public interface Operation {
public float run(float a,float b);
}
添加类
public class Add implements Operation{
@Override
public float run(float a, float b) {
return a+b;
}
}
乘法类
public class Multiply implements Operation {
@Override
public float run(float a, float b) {
return a*b;
}
}
减去类
public class Subtract implements Operation {
@Override
public float run(float a, float b) {
return a-b;
}
}
上下文类
public abstract class Context {
protected Operation OP;
public abstract float run(float a,float b);
}
AddContext 类
public class AddContext extends Context {
public AddContext(){
OP = new Add();
}
@Override
public float run(float a, float b) {
return OP.run(a,b);
}
}
MultiplyContext 类
public class MultiplyContext extends Context {
public MultiplyContext(){
OP = new Multiply();
}
@Override
public float run(float a, float b) {
return OP.run(a,b);
}
}
SubtractContest 类
public class SubtractContext extends Context {
public SubtractContext(){
OP = new Subtract();
}
@Override
public float run(float a, float b) {
return OP.run(a,b);
}
}
主类
public class Main {
public static void main(String... o){
// 1st Strategy
Context c = new AddContext();
System.out.println(c.run(1,2));
// 2nd Strategy
c = new SubtractContext();
System.out.println(c.run(1,2));
// 3rd Strategy
c = new MultiplyContext();
System.out.println(c.run(1,2));
}
}
【问题讨论】:
-
我看到的一件事是
...Context类的盲目冗余。 -
你怎么知道是策略模式?有什么参考吗?我在那些行中看不到任何东西
-
因为在我的期中论文里
-
Operation及其实现者是Strategy的经典示例。调用者只看到Operation,各种策略执行不同类型的操作。
标签: java design-patterns strategy-pattern