简单工厂模式实现

简单工厂模式实现教程

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

简单工厂模式详解

定义

简单工厂模式,严格意义上讲不算设计模式,而是一种编程习惯,根据传递的参数来判断返回一个具体的对象。

实现步骤

  1. 创建各个需要创建对象的类。
  2. 创建一个工厂类,方法根据不同的参数返回不同的对象。
  3. 拿到相应的对象,进行操作。

图解

07 简单工厂模式图解.png

简单工厂模式优缺点

优点

  • 不需要关心类的创建细节。
  • 减轻类之间的耦合依赖,具体类的实现只是依赖于简单工厂,而不依赖其它类。

缺点

  • 扩展复杂,当简单工厂需要生出另外一种产品的时候,需要扩展工厂的内部创建逻辑。
  • 由于工厂类集中了所有实例的创建逻辑,将全部的创建逻辑集中到了一个工厂类中,如果创建对象比较多,那么工厂类将会不停的扩大,代码将会难以维护。

案例

Java实现简单工厂模式

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

08 简单工厂代码结构图.png

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

package net.haicoder.factory.simple; /** * 定义一个抽象产品类 */ public abstract class AbstractProduct { /** * 生产产品 */ protected abstract void produce(); }

BusProduct.java 文件具体代码如下

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

CarProduct.java 文件具体代码如下

package net.haicoder.factory.simple; /** * 小汽车产品 */ public class CarProduct extends AbstractProduct { protected void produce() { System.out.println("嗨客网(www.haicoder.net)"); System.out.println("Hello world , I am a new Car"); } }

SimpleFactory.java 文件具体代码如下

package net.haicoder.factory.simple; public class SimpleFactory { /** * 简单工厂,生产出具体对象 * * @param productName * @return */ public AbstractProduct getProduct(String productName) { if ("bus".equals(productName)) { return new BusProduct(); } else if ("car".equals(productName)) { return new CarProduct(); } return null; } }

TestMain.java 文件具体代码如

package net.haicoder.factory.simple; public class TestMain { public static void main(String[] args) { SimpleFactory simpleFactory = new SimpleFactory(); AbstractProduct product = simpleFactory.getProduct("car"); product.produce(); } }

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

09 简单工厂运行结果.png

简单工厂模式总结

设计模式中的简单工厂模式,严格意义上讲不算设计模式,而是一种编程习惯,根据传递的参数来判断返回一个具体的对象。