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