1

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

假设我们有一个从多个客户端获取更新的服务,并且需要进行一些处理并将这些更新向前移动,这取决于它们的大小。我希望使服务尽可能简单,并对未来的更新格式(来自其他客户端)开放。

我想我可以让更新自己决定如何通过使用这种模式来处理和推进,并让服务尽可能简单。像这样的东西:

public class Service {
    void processUpdate(Update myUpdate) {

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

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

4

2 回答 2

5

对设计模式做得不好的最简单的方法是学习一个模式,然后去寻找放置它的地方。我在第一次学习的时候这样做了几次,结果非常令人沮丧。

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

于 2013-03-24T19:58:16.283 回答
2
  • 什么是策略?战略是旨在实现特定目标的行动计划;
  • “定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。” (四人组);
  • 指定一组类,每个类代表一个潜在的行为。在这些类之间切换会改变应用程序的行为。(战略);
  • 可以在运行时(使用多态性)或设计时选择此行为;
  • 捕获接口中的抽象,将实现细节隐藏在派生类中;

在此处输入图像描述

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

  • 良好的用途:

    • 当我们有一组相似的算法并且它需要在应用程序的不同部分在它们之间进行切换时。使用策略模式可以避免ifs并简化维护;
    • 当我们想向超类添加不一定对每个子类都有意义的新方法时。我们不是以传统方式使用接口,而是添加新方法,而是使用作为新功能接口的子类的实例变量。这被称为组合:类不是通过继承来继承能力,而是由具有正确能力的对象组成;
于 2013-05-24T15:40:34.780 回答