工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
工厂方法模式包含四个部分:
1.抽象产品:产品对象同一的基类,或者是同一的接口。
2.具体的产品:各个不同的实例对象类
3.抽象工厂:所有的子类工厂类的基类,或是同一的接口
4.具体的工厂子类:负责每个不同的产品对象的实际创建
具体代码示例,我们以买水果作为演示。
定义买的接口:
public interfaceIFrutis {voidbuy();
}
定义两个实现接口的类:
public class Banana implementsIFrutis{
@Overridepublic voidbuy() {
System.out.println("欢迎来买香蕉");
}
}
抽象的工厂接口:
public interfaceIFruitFactory {
IFrutis createFactory();
}
具体工厂子类:
public class BananaFactory implementsIFruitFactory {
@OverridepublicIFrutis createFactory() {return newBanana();
}
}
public class AppleFactory implementsIFruitFactory {
@OverridepublicIFrutis createFactory() {return newApple();
}
}
测试:
public classStudentTest {public static voidmain(String[] args) {//根据 需求的水果 生成 实体工厂//创建香蕉工厂
IFruitFactory iFruitFactory = newBananaFactory();//实体工厂
IFrutis banana =iFruitFactory.createFactory();
banana.buy();
IFruitFactory iFruitFactory1= newAppleFactory();
IFrutis factory=iFruitFactory1.createFactory();
factory.buy();
}
}
结果:
1 欢迎来买香蕉2 欢迎来买苹果
工厂方法模式,是最标准的一种工厂模式,也是应用广泛的一种模式。 But 工厂模式有一个很大的缺点:
就是,如果增加了一款产品,比如是Lenovo 那么你就需要为lenovo创建一个工厂类。
一个具体工厂只能创建一种具体产品。
系统类的个数将成对增加,在一定程度上增加了系统的复杂度;同时,有更多的类需要编译和运行,会给系统带来一些额外的开销。