我理解责任链模式的概念,但也许我错误地使用它.
我有几种类型的产品,我有一个控制器,控制为每种类型的产品显示的界面.用户选择产品类型,每个控制器负责显示和与适当的界面交互.
为此,我正在使用责任链模式,这听起来不错.我正在做的是创建一个控制器链,一旦我得到产品类型请求,我只是将它传递给控制器链,让相应的控制器实现请求.
但是在思考时,使用简单的工厂可以实现同样的目的,但有很多条件语句.
在这种情况下,您如何看待责任链的使用?
最佳答案 至于我,这项任务肯定不是责任链.
通常在责任链中,链元素的顺序很重要,而事实并非如此.
我会尝试做以下事情.
创建某种注册表,其中包含带有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方法获得适当的控制器.
与责任链相比,如果产品类型的数量很大,您将避免性能损失.