【发布时间】:2013-04-17 01:39:05
【问题描述】:
只是胡闹,我想到了这个想法,这是通用工厂方法模式的一个很好的实现吗?
工厂代码:
public static class Factory
{
public static T Create<T>() where T : new()
{
return new T();
}
}
在其他地方调用工厂:
class Program
{
static void Main(string[] args)
{
var obj = Factory.Create<Person>();
obj.Name = "Mark";
Console.WriteLine(obj.Name);
var obj2 = Factory.Create<Animal>();
obj2.AnimalType= "Dog";
Console.WriteLine(obj2.AnimalType);
dynamic obj3 = Factory.Create<ExpandoObject>();
obj3.Age= 20;
Console.WriteLine(obj3.Age);
Console.ReadKey();
}
}
我的意思是按预期工作...但是您发现这里有什么问题吗?因为我不...
任何建议都将不胜感激,因为我计划使用工厂来实例化对象,这些看起来不错..
提前致谢:D
编辑:我修改了工厂方法的名称以澄清问题,因为以前的名称是 GetInstance 并且令人困惑。
【问题讨论】:
-
我不确定我是否真的了解 Factory,因为我只阅读了“Head-first : design pattern”。但是,根据我的经验,工厂应该生产一些具有相同祖先(或实现相同接口)的产品。而且您的工厂仅受“new()”条件的限制。我认为这意味着每个 T 都是
Object的继任者,但Object没有提供Age、AnimalType或Name。在我看来,工厂应该是T的更多条件。 -
使用autofac。当您为同一类型调用 GetInstance 两次时,您的工厂将返回一个新实例
-
@COLDTOLD 只是做一些随机的事情, var 也可以正常工作。
-
@WouterHuysentruit 这不是工厂的想法吗?我不会为工厂的产品尝试任何单例。
-
我认为应该可以为您注册为单例的类型返回单例,但我不是工厂专家。
标签: c# design-patterns generics factory-pattern