一、简单工厂模式,因为创建对象的方法是static的,所以也叫静态工厂模式。
由来:静态工厂模式是为了对产品类有统一的创建方法,而对于客户端如何创建"产品"是不需要知道也不需要管的。
通过客户端提供的信息,new出不同的“产品”
关键代码:
class Factory(){
public static Farther(){
if("sub1"){
return new Sub1();
}else if("sub2"){
return new Sub2();
}
}
}
class Farther(){}
class Sub1 extends Farther(){}
class Sub2 extends Farther(){}
二、工厂模式,因为简单工厂模式不符合开闭原则,所以需要工厂模式来解决这个问题。
关键点:需要一个工厂接口和一个产品基类,在新添加的产品的情况下新建工厂和产品即可,符合开闭原则。
每一个产品的生产都需要一个工厂。优点是符合开闭原则(对修改关闭,对扩展开放)。缺点是造成类过多(每一个产品都需要一个产品子类和一个工厂类)
interface Factory(){
public Product factoryMethod();
}
class FactoryType1 implements Factory(){
public Product factoryMethod(){
return new ProductSub1();
}
}
class Product(){}
class ProductSub1 extends Farther(){}
三、抽象工厂模式,对产品过多的工厂模式,类的数量将极大的增加,抽象工厂模式可以将产品分族实现创建对象。
对添加产品族是符合开闭原则的,对改变产品结构是不合符开闭原则的。
abstract interface AbstractFactory(){ //每建一个子工厂都必须赋予这个工厂A,B两种产品的生产。每个工厂都可以有自己的实现(即不同的牌子的产品)
public abstract productA productAFactory();
public abstract productB productAFactory();
}