美文网首页PHP很简单PHP经验分享程序员技术栈
设计模式01--简单工厂模式(Simple Factory)

设计模式01--简单工厂模式(Simple Factory)

作者: 四月不见 | 来源:发表于2019-05-30 11:02 被阅读0次

一、简介

工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的简洁版,它不属于GoF 23种设计模式,但在软件开发中应用也较为频繁,通常将它作为学习其他工厂模式的入门,它的设计思想很简单。

因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式。

二、类结构

简单工厂模式结构如下:

角色 类别 简述
Product 产品类 一般是一个抽象类或是接口
ConcreteProduct 具体的产品类 实现或是继承 Product
Factory 工厂类 用来创建具体的产品
  • Product(抽象产品类):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
  • ConcreteProduct(具体产品类):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。
  • Factory(工厂类):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。

三、UML图

比如,我们有一些类,它们都继承自交通工具类:

四、类实现

1、产品类

interface Vehicle
{
    public function drive();
}

2、具体的产品类

class Car implements Vehicle
{
    public function drive()
    {
        echo '汽车靠四个轮子滚动行走。';
    }
}

class Ship implements Vehicle
{
    public function drive()
    {
        echo '轮船靠螺旋桨划水前进。';
    }
}

class Aircraft implements Vehicle
{
    public function drive()
    {
        echo '飞机靠螺旋桨和机翼的升力飞行。';
    }
}

3、工厂类

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

class VehicleFactory
{
    public static function build($className = null)
    {
        $className = ucfirst($className);
        if ($className && class_exists($className)) {
            return new $className();
        }
        return null;
    }
}

4、使用案例

工厂类用了一个静态方法来创建其他类,在客户端中就可以这样使用:

VehicleFactory::build('Car')->drive();
VehicleFactory::build('Ship')->drive();
VehicleFactory::build('Aircraft')->drive();

省去了每次都要new类的工作。

五、其它

1、优点

  • 实现起来非常简单,也充分利用了多态机制
  • 解耦「使调用端不再创建对象,而是交给工厂去创建」,并且对内部实现屏蔽「调用端不需要知道具体实现」
  • 分工明确,并且能更好的体现出代码含义

2、缺点

  • 由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响。
  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

3、适用场景

在以下情况下可以考虑使用简单工厂模式:

  • 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
  • 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。

相关文章

  • 设计模式

    设计模式(视频总结) [TOC] 一、简单工厂模式(Simple Factory) 简单工厂模式: 简单工厂模式属...

  • 工厂模式

    简单工厂模式(Simple Factory) 定义 简单工厂模式(Simple Factory Pattern):...

  • 工厂模式

    简单工厂模式(Simple Factory Pattern) 简单工厂模式(simple factory patt...

  • 1.1 creational 创建型 - simple Fact

    Simple Factory 简单工厂 [TOC] 创建型设计模式,又名 Static Factory 静态工厂...

  • Java设计模式——Factory工厂模式

    Factory工厂模式分为:1)简单工厂模式(Simple Factory) --- 普通工厂模式2)工厂方法模式...

  • 工厂模式——简单工厂模式

    工厂模式分为 简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Meth...

  • 重温设计模式

    设计模式 创建型设计模式:1.简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类...

  • 简单工厂模式

    简单工厂模式(Simple Factory),又叫静态工厂方法模式(Static Factory Method),...

  • 工厂模式01之简单工厂

    概念 简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Metho...

  • 设计模式01--简单工厂模式(Simple Factory)

    一、简介 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模...

网友评论

    本文标题:设计模式01--简单工厂模式(Simple Factory)

    本文链接:https://www.haomeiwen.com/subject/rrfmtctx.html