简单工厂的结构
IProduct
{
公共方法
}
SimpleFactoryBuildProduct
{
static IProduct Create(类名)
{
switch(类名)
{
case Product1: return new Product1();
case Product2: return new Product2();
}
}
}
product1 : IProduct
{}
product2 : IProduct
{}
programe
{
Main()
{
Product1 p1 = SimpleFactoryBuildProduct.Create("Product1");
Product2 p2 = SimpleFactoryBuildProduct.Create("Product2");
}
}
工厂方法解决问题的意图如下(拙见):
工厂方法世纪上没有省略要做的工作。象所有设计模式一样,工厂方法提供一个更加抽象的视角归纳问题。最理想的应用工厂方法的场景时抽象产品具有所有产品的公共方法,在具体使用时可以用抽象产品代替所有具体产品(也就是说抽象产品具有产品的所有对外接口);这样抽象工厂提供了统一管理产品生成的场所,通过约定(要产品找工厂),为产品提供了统一生成接口。
该模式对开闭原则的实现度:
可以在不该变客户端原有系统的情况下新增一个产品,但是如果要使用新产品时出外。
如果要增加一个新的产品,需要增加该产品的实现,并在工厂方法中新增一个创建项。