“现实生活”中的战略模式

时间:2013-03-24 15:18:44

标签: design-patterns strategy-pattern

我正在尝试将维基百科的策略模式示例转换为现实生活中的问题,但我不确定我的场景是否确实需要这样的模式。

说我们有一个服务可以从多个客户端获取更新,并且需要进行一些处理并向前移动这些更新,具体取决于它们的大小。 我希望尽可能简化服务,并为未来的更新格式(来自其他客户)打开。

我想我可以通过使用这种模式让更新本身决定如何成为流程并向前推进,并让服务尽可能简单。像这样的东西:

public class Service {
    void processUpdate(Update myUpdate) {

        myUpdate.process();
        myUpdate.moveForward();
    }
}         

我错了吗?如何(在哪里......)为每次更新分配策略?

2 个答案:

答案 0 :(得分:2)

使用设计模式做一个糟糕工作的最简单方法是学习模式,然后尝试找到放置它的地方。当我第一次学习时,我做了几次,结果非常令人沮丧。

策略模式是针对特定问题形状的解决方案。那个问题是“我需要做的事情基本相同,但中间有一些变化”。所以现在,请记住如何制定策略模式,当您看到表明它的问题时,请使用它。

答案 1 :(得分:2)

  • 什么是策略?战略是旨在实现特定目标的行动计划;
  • “定义一系列算法,封装每个算法,并使它们可互换。策略允许算法独立于使用它的客户。“(Gang of Four);
  • 指定一组类,每个类表示一个潜在的行为。在这些类之间切换会改变应用程序行为。 (战略);
  • 可以在运行时(使用多态)或设计时选择此行为;
  • 在界面中捕获抽象,将实现细节隐藏在派生类中;

enter image description here

  • 策略的替代方法是使用条件逻辑更改应用程序行为。 (BAD);
  • 使用此模式可以更轻松地添加或删除特定行为,而无需重新编码和重新测试应用程序的全部或部分内容;

  • 好用途:

    • 当我们有一组类似的算法,并且需要在应用程序的不同部分之间切换它们。使用策略模式可以避免ifs并简化维护;
    • 当我们想要向超类添加新方法时,这些方法对每个子类都没有意义。我们使用一个实例变量代替以传统方式使用接口,我们使用一个实例变量作为新功能接口的子类。这称为组合:不是通过继承继承一个能力,而是由具有合适能力的对象组成的类;