编程语言
首页 > 编程语言> > java – 对策略设计模式感到困惑

java – 对策略设计模式感到困惑

作者:互联网

我无法理解为什么在策略设计模式中使用Context模块(我们将在下面的代码中看到),它的功能是什么?让我们看一下战略设计模式的一部分.

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

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

从上面的代码中,我们可以通过这种方式调用不同的算法:

Context context = new Context(new OperationAdd());
context.executeStrategy(10,5);

我无法完全理解,为什么不能直接调用子类,而是使用Context层.在我看来,就像这样:

Strategy addStrategy = new OperationAdd();
addStrategy.doOperation(10, 5);

解决方法:

即使我不喜欢这个例子,我也会解释拥有Context的优点.

这里Context已被用于包装所有策略.如果你正确使用它,它可以充当迷你门面或工厂.

如果我必须实现Context,我将在构造期间创建一次所有策略并实现Factory_Method以返回基于Input参数使用的策略.即使我们可以通过此approach避免if else条件.

一旦我得到了策略,我将简单地调用executeStrategy,它隐藏了我策略的内部.

在没有Context的情况下,调用者必须在执行策略之前获取具体策略.如果在应用程序中调用“添加”或“减去”策略100次,则必须公开具体的具体策略.

如果我有Context,它将通过隐藏我的策略来提供正确的策略,并且可以在运行时切换策略.

另外一点:来自维基百科的Strategy_Pattern提供了很好的例子.这个例子可能与问题无关,但它可以提供很好的洞察力来理解战略模式的有效性(特别是章节:战略和开放/封闭原则)

为了更好地理解策略模式,请看看这篇文章:

Real World Example of the Strategy Pattern

标签:java,design-patterns,strategy-pattern
来源: https://codeday.me/bug/20190523/1156678.html