工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
这两个模式没有很明显的区别,区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,我们就可能要将上例中Factory变成抽象类,将共同部分封装在抽象类中,不同部分使用子类实现。
下面关于是在网络中查到关于工厂方法模式与抽象工厂模式的概述和区别:
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
抽象工厂模式相比工厂方法模式要复杂一些,这里针对抽象工厂模举例说明。如果能够理解抽象工厂模式,工厂方法模式就很easy了。
抽象产品角色:
public interface Creator
{
public ProductA factoryA();
public ProductB factoryB();
}
具体工厂类1:
public class ConcreteCreator1 implements Creator
{
public ProductA factoryA()
{
return new ProductA1();
}
public ProductB factoryB()
{
return new ProductB1();
}
}
具体工厂类2:
public class ConcreteCreator2 implements Creator
{
public ProductA factoryA()
{
return new ProductA2();
}
public ProductB factoryB()
{
return new ProductB2();
}
}
抽象产品类A:
public interface ProductA
{
}
抽象产品类B:
public interface ProductB
{
}
具体产品类ProdcutA1:
public class ProductA1 implements ProductA
{
public ProductA1()
{
}
}
具体产品类ProdcutA2:
public class ProductA2 implements ProductA
{
public ProductA2()
{
}
}
具体产品类ProdcutB1:
public class ProductB1 implements ProductB
{
public ProductB1()
{
}
}
具体产品类ProdcutB2:
public class ProductB2 implements ProductB
{
public ProductB2()
{
}
}
我个人理解抽象工厂模式是工厂方法模式的扩充。