默认策略.策略模式c#

本文关键字:策略 模式 默认 | 更新日期: 2023-09-27 18:05:01

像下面的代码一样使用默认策略是正常的吗?

public abstract class ClContext
{
    protected sealed class InitialAlgorithm : IClAlgorithm
    {
        public void Initialize()
        {
            return;
        }
        public void Execute()
        {
            return;
        }
        public Byte[] Result
        {
            get { return new Byte[1]{0}; }
        }
    }
    protected IClAlgorithm algorithm;
    protected ClContext(IClAlgorithm algorithm = null)
    {
        this.algorithm = algorithm ?? new ClContext.InitialAlgorithm();
    }
    public void Execute()
    {
        this.algorithm.Execute();
    }
}

提供像

这样的自动实现属性也是正常的吗?
public IClAlgorithm Algorithm 
{
    get;
    set;
}

我只是好奇,从设计的角度来看,这是否可以接受。

谢谢!

默认策略.策略模式c#

我无法想象这种设计会有什么用处——你的类依赖于通过构造函数传入的策略,以后可能会通过属性设置器进行更改。不传递依赖项将不允许调用者创建你的类的实例。

你应该只提供一个"默认"策略,如果它确实做了一些有用的事情,即使这样,我也不会把它们捆绑在一起,而是让一个工厂方法用这个策略创建你的类。