[英]Is there a name for this aggregative design pattern?
当我想避免使用较大的switch语句时,经常会使用以下模式(请原谅“动物”主题):
public enum AnimalType { Dog, Cat, Hamster }
public interface IAnimal
{
AnimalType AnimalType { get; }
}
public class Cat : IAnimal
{
public AnimalType AnimalType { get { return AnimalType.Cat; } }
}
public class AnimalAggregator
{
private readonly IDictionary<AnimalType, IAnimal> _animals;
public AnimalAggregator(IEnumerable<IAnimal> animals)
{
_animals = animals.ToDictionary(a => a.AnimalType);
}
public IAnimal Get(AnimalType animalType)
{
IAnimal animal;
return _animals.TryGetValue(animalType, out animal) ? animal : null;
}
}
在上面的示例中,我将依赖于AnimalAggregator
并允许IoC容器连接所有IAnimal
的注入。 然后,我没有写一个大的switch语句来检索与IAnimal
关联的AnimalType.Cat
,而是调用animalAggregator.Get(AnimalType.Cat)
。
我在项目中多次使用这种模式(及其变体),但不知道该怎么称呼-我倾向于使用“聚合器”,但是我不确定这是正确的。 不过,我从未在自己的代码之外看到它。
它有名字吗?
在我看来,这应该是一种抽象的工厂模式:
提供一个用于创建相关或依赖对象族的接口,而无需指定其具体类。
然后,您将拥有一个AnimalFactory,每种动物类型具有不同的GetMethods。 我想您可能有一个通用的get方法,但这违反了抽象工厂的目的。 由于您受到枚举的任何限制,所以为什么每种类型都没有方法。
有关更多信息,请参见http://www.dofactory.com/Patterns/PatternAbstract.aspx
我认为这只是抽象工厂模式的一种变体。 剩下要做的唯一事情就是让AnimalAggregator
扩展IAnimalFactory
接口并更改客户端代码以依赖IAnimalFactory
而不是AnimalAggregator
。
public inteface IAnimalFactory
{
IAnimal Get(AnimalType t);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.