【发布时间】:2014-09-16 04:49:16
【问题描述】:
我发现的所有示例通常都基于枚举,它提供了返回正确的类。我需要一些对类的类型有一般反应的东西,并且通过在每次调用时给它新的参数来控制新对象的构造函数。
还是工厂方法吗?是很好的解决方案吗?我可以这样玩设计模式吗?也许有更好的解决方案可以提供?
using System;
namespace ConsoleApplication1
{
public abstract class Strategy
{
protected int Init;
private static int _initA = 3;
private static int _initB = 42;
public static Strategy StrategyFactory(Strategy strategyType)
{
var tempStrategyA = strategyType as StrategyA;
if (tempStrategyA != null)
{
_initA++;
return new StrategyA(_initA);
}
var tempStrategyB = strategyType as StrategyB;
if (tempStrategyB != null)
{
_initB = _initA * 2;
return new StrategyB(_initB);
}
throw new ArgumentException();
}
}
public class StrategyA : Strategy
{
public StrategyA(int init)
{
Init = init*2;
}
}
public class StrategyB : Strategy
{
public StrategyB(int init)
{
Init = init*3;
}
}
}
【问题讨论】:
-
虽然这技术上是一种工厂方法,但它结合了一个很好的ick案例。考虑让策略本身处理特定于策略的操作;虽然特定类型的调度并不总是坏事,但在这个例子中它确实没有位置。
-
错了?我试图将其分离,并将这种责任转移到战略本身。但经过多次尝试,我失败了,我发现这可能是最好的解决方案。
-
对我来说,工厂返回与其接受的类型相同的类型是没有意义的。我使用工厂方法的唯一一次是返回调用者不知道的类型。
-
为什么需要工厂?你到底想完成什么?
-
这有点太抽象了。
标签: c# design-patterns factory-pattern