4

我理解责任链模式的概念,但也许我用错了。

我有几种类型的产品,并且我有一个控制器来控制为每种类型的产品显示的界面。用户选择产品类型,每个控制器负责显示相应的界面并与之交互。

为此,我使用了责任链模式,我认为这听起来不太好。我正在做的是创建一个控制器链,一旦我得到产品类型请求,我只需将它传递给控制器​​链并让适当的控制器实现请求。

但是在思考的时候,同样可以使用一个简单的工厂来实现,但是有很多条件语句。

您如何看待在这种情况下使用责任链?

4

1 回答 1

2

对我来说,这项任务绝对不是责任链。
通常在责任链中,链元素的顺序很重要,但在这里并非如此。

我会尝试执行以下操作。
创建某种注册表,其中包含一个带有 productType 键和控制器值的映射。

示例实现:

class ControllerRegistry
{
  //declaration for map and constructor

  public void Register(string productType, IProductController controller)
  {
    _map.Add(productType, controller);
  }

  public IProductController Find(string productType)
  {
    return _map[productType];
  }
}

ControllerRegistry.Register在应用程序启动期间,您应该通过调用方法注册所有控制器。
您可以通过调用ControllerRegistry.Find方法获得适当的控制器。
与责任链相比,如果产品类型的数量很大,您将避免性能损失。

编辑
相同的任务主题处理多种消息类型的设计模式

于 2013-02-22T21:12:41.850 回答