实施战略模式的最佳方式

本文关键字:最佳 方式 模式 施战略 | 更新日期: 2023-09-27 18:17:57

我一直在寻找Strategy Pattern,我看到了这个链接,这个家伙已经很好地解释了这个模式。

但据我所知(也许是对的或错的),你不应该在另一个class中创建一个新的class(为了松散耦合)。

this.motor = new Motor(this)

是否有一种更好的实现,不违反原则(如IoC)?

实施战略模式的最佳方式

它将产生一个更易于维护的代码,将您的策略和上下文定义为接口:

interface IStrategy<T> where T : IContext
{
    T Context { get; }
    void Execute();
}
// this cab have other structures too depending on your common logic
// like being generic
interface IContext
{
}

我自己更喜欢构造函数注入。但是在这种情况下,需要属性注入,因为可能需要在运行时更改策略。

现在你可以实现/注入你的具体类型了

可以使用构造函数注入。

public class MyClass{
public MyClass(Motor motor){
       this.motor = motor;
   }

}

然后,由您的IOC容器来提供所需的依赖项。

当然,有很多可能性。战略工厂呢?

this.motor = MotorFactory.newMotor(MotorFactory.BOOST);

或者仅仅是一个用于注入的mutator方法(假设IMotor是电机的抽象接口:)

void setMotor(IMotor m) {
    this.motor = m;
}

你可以使用"dynamic"在c#中改成这样:

方法(动态输入)

方法(DTO1输入)方法(DTO2输入)方法(DTO3输入)