我正在做一些关于设计模式实现变体的研究,我遇到并阅读了一些在此实现的示例http://www.codeproject.com/Articles/37547/Exploring-Factory-Pattern和http://www.oodesign.com/factory-pattern.html。我关注的焦点是在没有反思的情况下实施工厂模式。所陈述的文章说,我们需要注册的对象不是类,这似乎罚款和逻辑给我,但看到了实现的时候,我看到的方法RegisterProduct用于自registeration例如,在代码的物体的下面无反射的工厂模式实现
// Factory pattern method to create the product
public IRoomType CreateProduct(RoomTypes Roomtype)
{
IRoomType room = null;
if (registeredProducts.Contains(Roomtype))
{
room = (IRoomType)registeredProducts[Roomtype];
room.createProduct();
}
if (room == null) { return room; }
else { return null; }
}
// implementation of concrete product
class NonACRoom : IRoomType
{
public static void RegisterProduct()
{
RoomFactory.Instance().RegisterProduct(new NonACRoom(), RoomTypes.NonAcRoom);
}
public void getDetails()
{
Console.WriteLine("I am an NON AC Room");
}
public IRoomType createProduct()
{
return new NonACRoom();
}
}
重复,我们必须在创建工厂对象之前调用它,也就是在客户的主要类中的某个地方或确保其调用的任何适用的任何地方之前。下面是我们正在创建一个新产品,并在上面的方法中,我们正在创造一个似乎没有意义的新产品。任何机构对此的评论
我很抱歉,我不能让你多。你能否详细说明一下。我看到为同一件事物创建了两个对象,如果我们有一个散列图并且我们已经注册了这个对象,为什么我们应该重用它而不是创建它 – 2012-03-13 07:56:53
因为工厂模式是为了创建** NEW **对象。在工厂模式中,最终目标是创建许多对象。在这种特殊情况下,您需要第一个实例,然后使用第一个实例创建许多新实例。 'createProduct'通常在这样的应用程序中被称为数千次。 – 2012-03-13 07:59:06
对我来说很有意义 – 2012-03-13 08:00:33