工厂方法模式实现

工厂方法模式实现教程

工厂模式 分为 简单工厂模式工厂方法模式抽象工厂方法模式

工厂方法模式实现详解

定义

工厂方法模式用于定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体的子类工厂类当中。这个要求满足创建与使用相分离的特点。

实现步骤

  1. 创建各个产品的工厂类。
  2. 创建各个产品。
  3. 用各个工厂类创建各个产品。
  4. 调用各个工厂类获取到相应的产品对象。
  5. 拿到各个产生的对象进行操作。

图解

10 工厂方法图解.png

工厂方法模式优缺点

优点

  • 新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可,不需要知道产品的具体创建过程。
  • 在系统增加新的商品时只需要添加具体产品类和对应的具体工厂类,不需要对原来的工厂进行任何修改,不影响原来的逻辑。
  • 对象的创建对于调用方而言是透明的,即使将来需要修改方法逻辑,对于调用方而言是无感知的。

缺点

  • 添加新产品时,除了增加新产品类外,还要提供与之对应的具体工厂类,系统类的个数将成对增加,在一定程度上增加了系统的复杂度,同时,有更多的类需要编译和运行,会给系统带来一些额外的开销。
  • 一个具体工厂只能够创建一种具体产品。

案例

Java实现工厂方法模式

首先我们创建一个 net.haicoder.factory.facrotyMethod 包,在该包下面创建 AbstractProduct.javaBusProduct.javaCarProduct.javaFactoryMethod.javaBusFactory.javaCarFactory.javaTestMain.java 文件。文件创建完毕,目录结构如下图:

11 工厂方法代码结构图.png

AbstractProduct.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public abstract class AbstractProduct { protected abstract void produceProduct(); }

BusProduct.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public class BusProduct extends AbstractProduct { protected void produceProduct() { System.out.println("嗨客网(www.haicoder.net)"); System.out.println("Hello , I am a new Bus"); } }

CartProduct.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public class CarProduct extends AbstractProduct { protected void produceProduct() { System.out.println("嗨客网(www.haicoder.net)"); System.out.println("I am a new Car"); } }

FactoryMethod.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public abstract class FactoryMethod { public abstract AbstractProduct getProduct(); }

BusFactory.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public class BusFactory extends FactoryMethod { public AbstractProduct getProduct() { return new BusProduct(); } }

CarFactory.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public class CarFactory extends FactoryMethod { public AbstractProduct getProduct() { return new CarProduct(); } }

TestMain.java 文件具体代码如下:

package net.haicoder.factory.facrotyMethod; public class TestMain { public static void main(String[] args) { FactoryMethod carFactory = new CarFactory(); carFactory.getProduct().produceProduct(); FactoryMethod busFactory = new BusFactory(); busFactory.getProduct().produceProduct(); } }

程序运行后,控制台输出如下信息:

12 工厂方法运行结果.png

工厂模式总结

设计模式中的工厂模式 ,一个产品对应一个工厂,创建一个对象通过调用工厂来产生。需要定义一个抽象的工厂方法,用来产生一个抽象的对象,每个工厂都要继承该抽象工厂类,用来实现对象的产生。