设计模式-简单工厂模式

来源:互联网 发布:美食纪录片 知乎 编辑:程序博客网 时间:2024/06/08 16:51

概述

简单工厂模式基本流程:首先将需要创建的具体产品类的公共特性提取出来封装到抽象产品类中,具体产品类作为抽象产品的子类。工厂类负责创建各种产品,提供一个创建产品的工厂方法,该方法可以根据传入的不同参数返回不同类型的对象实例。客户端只需要调用相应的工厂方法并传入相应参数就能得到相应的产品对象。

模式定义

简单工厂模式(Simple Factory Pattern)定义:定义一个工厂类,它可以根据传入参数的不同返回不同类的实例,被创建的实例通常具有共同的父类。因为简单工厂模式里用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,属于类创建型模式。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。简单工厂模式结构比较简单,其核心是工厂类的设计。本文使用空调工厂为例,其结构如图所示:
简单工厂模式结构图

简单工厂模式结构图中包含如下几个角色:

AirCondtionerFactory(工厂角色):工厂角色即工厂类,是简单工厂模式的核心,负责创建所有具体产品类的内部逻辑。工厂类可以被外部直接调用,创建所需的产品对象。工厂类包含一个创建具体产品的create方法,负责创建具体产品,它的返回类型为抽象产品类型(AbstractAirCondtioner)。

AbstractAirCondtioner(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法。它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。

AuxAirConditioner(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。

Java代码实现

抽象产品角色

public abstract class AbstractAirCondtioner {    /**     * 打开     */    abstract void open();    /**     * 关闭     */    abstract void close();}

具体产品角色

public class AuxAirConditioner extends AbstractAirCondtioner {    @Override    void open() {        System.out.println("打开Aux空调");    }    @Override    void close() {        System.out.println("关闭Aux空调");    }}

工厂角色

public class AirConditionerFactory {    public static AbstractAirCondtioner create(String type) throws UnkownTypeException {        if (type.equalsIgnoreCase("aux")) {            return new AuxAirConditioner();        } else if (type.equalsIgnoreCase("midea")) {            return new MideaAirConditioner();        } else {            throw new UnkownTypeException();        }    }}

总结

主要特点

1、对类的实例化过程进行了抽象,将对象的创建与使用过程分离。
2、当你需要某一个对象实例时,只需要传入一个正确的参数,就可以获取你想要的对象,无须了解对象的创建细节。
3、主要缺点是工厂类集中了所有产品类的创建逻辑,导致职责过重;且由于使用了静态工厂方法,使得工厂角色无法形成基于继承的等级结构。

适用场景

工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

原创粉丝点击