工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。
该模式用于封装和管理对象的创建,是一种创建型模式。
工厂模式一般分为3类:
① 简单工厂模式(Simple Factory)
② 工厂方法模式(Factory Method)
③ 抽象工厂模式(Abstract Factory)
这三个模式从前到后,依次逐步抽象化。
简单工厂模式 概述
这是工厂模式中最简单的一种,专门定义一个类来负责创建其他类的实例,同时被创建的实例具有共同的父类。
简单工厂模式包括3个主要的角色:
➷ 简单工厂类(SimpleFactory):只包含创建产品的静态方法。
➷ 抽象产品父类(Product):简单工厂类中生产的产品接口,声明了产品的抽象方法。
➷ 具体产品子类(ProductA 或ProductB):具体产品的实现。
UML图场景描述
某城市气候宜人,盛产水果,尤其盛产苹果(Apple)和香蕉(Banana),很多年来,各家果农都是自己负责苹果或香蕉的采摘、包装、销售,每个果农都要自备生产包装的设备,大家不能复用这些设备产出水果,因此生产效率非常低下。
有一个老总看到这个情况,决定投资建立了一家水果工厂(SimpleFactory),统一负责生产这些苹果或香蕉(Product),各家果农只要负责提供自己的苹果(ProductA)或者香蕉(ProductB),工厂负责根据果农的指定生产具体的水果(采摘、包装、销售等),因此生产流程效率大大提高,这就是简单工厂模式。
场景角色映射:★ 简单工厂类:SimpleFactory→FruitFactory。
类 FruitFactory 对应 SimpleFactory,它用来统一生产苹果或香蕉(包装、销售等),工厂中有一个静态方法CreateFruit(),就相当于一套流水线设备,可以根据提供的水果类型来生产不同的水果(Apple 或者 Banana)。
★ 抽象产品父类:Product→Fruit。
水果接口类,统一定义苹果类和香蕉类的处理方法。
★具体产品子类(ProductA或ProductB):ProductA→Apple,ProductB→Banana。
代码演示抽象产品父类
package com.design; // 抽象产品父类 abstract class Fruit { // 构造方法 public Fruit(){ System.out.println("生产原料准备中。。"); }; // 定义水果的处理方法 public abstract void operateFruit(); }