我一直在寻找Strategy Pattern
,我看到This链接,该家伙已经很好地解释了这种模式。
但据我所知(可能是对或错),你不应该在另一个class
中创建一个新的class
(为了松散耦合)。
this.motor = new Motor(this)
是否有更好的实施方式可以不违反原则(如IoC)?
答案 0 :(得分:2)
它将产生一个更易于维护的代码,将您的策略和上下文定义为接口:
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
{
}
我,我自己更喜欢构造函数注入。但在这种情况下需要进行属性注入,因为可能需要在运行时更改策略。
现在您可以实现/注入您的具体类型。
答案 1 :(得分:0)
您可以使用构造函数注入。
public class MyClass{
public MyClass(Motor motor){
this.motor = motor;
}
}
然后,由您的IOC容器提供所需的依赖项。
答案 2 :(得分:0)
当然,有很多可能性。战略工厂怎么样?
this.motor = MotorFactory.newMotor(MotorFactory.BOOST);
或者只是一个用于注入的mutator方法(假设IMotor
是电机的抽象接口:)
void setMotor(IMotor m) {
this.motor = m;
}
答案 3 :(得分:0)
u可以在c#中使用“动态”,而不是这样:
方法(动态输入)
方法(DTO1输入)方法(DTO2输入)方法(DTO3输入)