C# 战略模式替代实施

C# 战略模式替代实施,c#,generics,strategy-pattern,C#,Generics,Strategy Pattern,目前,我有一个标准的战略模式实施,简化了: public interface IStrategy { IList<Dog> GetDogs(); } public class DogStrategy: IStrategy { public IList<Dog> GetDogs() { return new List<Dog>(); } } 问题:我发现在两个地方实现了该模式后,接口开始有点扩散。这是易于管理和

目前,我有一个标准的战略模式实施,简化了:

public interface IStrategy
{
    IList<Dog> GetDogs();

}

public class DogStrategy: IStrategy
{
    public IList<Dog> GetDogs()
    {
       return new List<Dog>();
    }
}
问题:我发现在两个地方实现了该模式后,接口开始有点扩散。这是易于管理和灵活的,但我知道同事们会因为文件太多而感到不安——他们不喜欢设计模式。我还需要使用一些策略通用的逻辑,以便集合需要有一个从中继承的抽象类

我不想使用所有这些接口让DogCollection从包含额外逻辑的泛型集合继承:

public class DogCollection : GenericCollection<Dog>
公共类DogCollection:GenericCollection
我可以使用加载器属性而不是IStrategy属性。然后,我可以删除两种策略模式的各种文件:

public abstract class GenericCollection<T> 
{
    private Func<IList<T>> loader;
    public Func<IList<T>> Loader
    {
        get { return loader; }
        set 
        {
            loader = value; 
            //do stuff
        }
    }
}
公共抽象类GenericCollection
{
私有函数加载器;
公共函数加载器
{
获取{return loader;}
设置
{
加载器=值;
//做事
}
}
}
我不想通过在各种条件下建立具体的策略实现来设置策略,也不想在DogCollection中设置策略,而是简单地创建一个静态类,其中包含获取不同的dog并分配Loader属性的例程。然后,可以使用loader属性在请求列表时返回列表


首选哪一种?为什么?

这仍然是策略模式

请注意,设计模式通常用于克服您使用的编程语言中的缺点

在C#中,通过使用委托类型,函数几乎是所谓的一等公民,实际上不需要将策略封装到接口和类中


效果基本相同,我更喜欢使用
Func
委托的第二种方法:代码更少,接口更少,类更少,文件更少,混乱更少

我同意,我现在删除了很多代码。策略模式上的每个示例都使用老式的接口方法。顺便说一句,我说的是替代实现,而不是替代模式。
public abstract class GenericCollection<T> 
{
    private Func<IList<T>> loader;
    public Func<IList<T>> Loader
    {
        get { return loader; }
        set 
        {
            loader = value; 
            //do stuff
        }
    }
}