简单工厂就是将创建类的操作封装在一个工厂类中,该工厂只被用来创建类,通常传递一个参数用以指定创建具体哪个类。创建类的方法可以被用来设置成静态方法,这样就不用创建工厂类的实例了,这种工厂也称之为静态工厂。一般情况下我们都使用静态工厂,其缺点是不能通过类的特性如继承和多态来扩展和改变行为,也就是说其违背了设计模式的一个重要原则:开-闭原则(对修改关闭,对扩展开放)。简单工厂实际上就是将创建对象的可能的变化封装在一个具体(工厂)类中,这样工厂内部所作的任何改变不影响客户类(客户依赖的只是工厂类的名字,客户一般情况下都不只一个。)。简单工厂不能称之为一个设计模式,而更像是一种编程习惯,所以这里也就简单描述一下了,:)。
应用场景:所有创建型模式都是用来解决对象创建可能存在的变化,简单工厂也不例外。
简单工厂实现:
//产品类
public class Product
{
}
//产品A
public class ProductA:Product
{
}
//产品B
public class ProductB:Product
{
}
//工厂类
public class SimpleFactory
{
public static Product CreateProduct(string astg_Type)
{
//这里常量A,B可以以枚举的形式给出,这样客户将不可能传进错误值。
if (astg_Type == "A")
{
return new ProductA();
}
else if (astg_Type == "B")
{
return new ProductB();
}
else return null;
}
}
//客户类
public class Client
{
public void GetProducts()
{
//当工厂类中有任何变动时(例如新增一个C类型),原有的客户类不需要作任何改动。
SimpleFactory.CreateProduct("A");//创建A产品
SimpleFactory.CreateProduct("B");//创建B产品
}
}