1.模式结构
简单工厂模式就是有一个工厂类根据传入的变量决定哪一种产品的实例。
工厂类(Creator): 负责创建实例,由客户端调用.
抽象产品(Product):需要创建的产品的共有的父类或者接口.对客户端只暴露这个接口。
具体产品(ConcreteProduct): 工厂类的创建的实际实例,可以有多个,工厂类根据参数决定创建哪一个。
2.源码
Creator:
public class Creator
{
public static Product factory(String arg)
{
return new ConcreteProduct();
}
}
Product:
public interface Product
{
}
ConcreteProduct:
public class ConcreteProduct implements Product
{
public ConcreteProduct(){}
}
使用(客户端)client:
public class Client
{
public static Product factory(String which) throws Exception
{
if (which.equalsIgnoreCase("1"))
{
return new ConcreteProduct();
}
else if (which.equalsIgnoreCase("2"))
{
return new ConcreteProduct2();//此类代码中没有给出
}
else
{
throw new Exception("request");
}
}
}
参数自定义,是返回何种对象的依据,此代码中只是个示例。
3.模式的其他结构
1.Creator可以有多个工厂方法
2.Product 根据情况可以省略,直接在工厂类的返回具体产品类型。不过这种就对客户端暴露了比较多的信息,耦合度较高
3.工厂角色和抽象产品合并,由抽象产品角色担任工厂角色,具体做法是将工厂类的方法(factory())搬移到抽象产品类中,然后去掉工厂类。
4.全部合并,在3的基础上,把方法(factory)搬移到具体产品类中
4.模式优缺点
优点:客户端免去了直接创建产品的责任。实现了对责任的分割。添加产品时,只需要修改工厂类的逻辑,客户端类不用修改,在一定限度实现了开闭原则。
缺点:当产品类有复杂的多层次结构时,工厂类的逻辑会变的复杂,当产品有不同接口时,逻辑会更加难以维护和扩展。