1.9.1. 目的

与抽象工厂模式类似,此模式用于创建一系列相关或相互依赖的对象。 『静态工厂模式』与『抽象工厂模式』的区别在于,只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 factory 或 build。

1.9.2. 例子

Zend Framework: Zend_Cache_Backend 或 _Frontend 使用工厂方法创建缓存后端或前端

1.9.3. UML 图

1.9.4. 代码

你可以在 GitHub 上找到这个代码。

StaticFactory.php

namespace DesignPatterns\Creational\StaticFactory;

/**

* 注意点1: 记住,静态意味着全局状态,因为它不能被模拟进行测试,所以它是有弊端的

* 注意点2: 不能被分类或模拟或有多个不同的实例。

*/

final class StaticFactory

{

/**

* @param string $type

*

* @return FormatterInterface

*/

public static function factory(string $type): FormatterInterface

{

if ($type == 'number') {

return new FormatNumber();

}

if ($type == 'string') {

return new FormatString();

}

throw new \InvalidArgumentException('Unknown format given');

}

}

FormatterInterface.php

namespace DesignPatterns\Creational\StaticFactory;

interface FormatterInterface

{

}

FormatString.php

namespace DesignPatterns\Creational\StaticFactory;

class FormatString implements FormatterInterface

{

}

FormatNumber.php

namespace DesignPatterns\Creational\StaticFactory;

class FormatNumber implements FormatterInterface

{

}

1.9.5. 测试

Tests/StaticFactoryTest.php

namespace DesignPatterns\Creational\StaticFactory\Tests;

use DesignPatterns\Creational\StaticFactory\StaticFactory;

use PHPUnit\Framework\TestCase;

class StaticFactoryTest extends TestCase

{

public function testCanCreateNumberFormatter()

{

$this->assertInstanceOf(

'DesignPatterns\Creational\StaticFactory\FormatNumber',

StaticFactory::factory('number')

);

}

public function testCanCreateStringFormatter()

{

$this->assertInstanceOf(

'DesignPatterns\Creational\StaticFactory\FormatString',

StaticFactory::factory('string')

);

}

/**

* @expectedException \InvalidArgumentException

*/

public function testException()

{

StaticFactory::factory('object');

}

}

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接

我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

php 工厂静态类,静态工厂模式(Static Factory)相关推荐

  1. 简单工厂(静态工厂)

    文章目录 简单工厂(静态工厂) 示例 使用典范 简单工厂(静态工厂) 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,不属于GOF23种设计模式 适用场景: 工厂类负责创建的对象比较少 ...

  2. spring:动态工厂,静态工厂

    Bean的装配之动态工厂方式 (1) 如何理解Bean的装配? Bean的装配即bean(类对象)的装配 (2) 动态工厂方式创建Bean的步骤有哪些? ① 注册工厂 <!--使用Factory ...

  3. 工厂方法模式(Factory Method)

    简单工厂(静态工厂方法) 简单工厂实际上不算一种模式,可以把它叫做一种常用写法.例如我们常用的数据库操作,为了适配不同的数据库引擎,可能分别编写了具体的数据库操作类(当然这些类都实现了统一的接口): ...

  4. java工厂模式静态工厂_Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...

  5. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  6. SpringIOC手动装配(注入):构造器注入,静态工厂注入,实例化工厂注入

    1.本篇博客的背景和目的 目前我本人正在学习SpringFramework的知识,这也是这个专栏的主题.我前面的几篇博文中,简单的认识了一下SpringFramework,记录了SpringFrame ...

  7. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

    工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...

  8. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  9. 设计模式之简单工厂模式(静态工厂方法)

    模式定义: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式是由一个工厂对象 ...

最新文章

  1. linux之shell脚本学习篇一
  2. 微软称不放弃收购雅虎
  3. @MyBatis主键返回
  4. java创建阻塞_如何从HttpsURLConnection创建Java非阻塞InputStream?
  5. python turtle画彩虹的代码_如何用python海龟库画彩虹
  6. 信号集操作函数,信号未决、阻塞、递达
  7. Android 设置 横屏 竖屏 (转)
  8. java while循环_Java while循环
  9. SonarLint黄线警告python:S125
  10. 11.深入分布式缓存:从原理到实践 --- Aerospike原理及广告业务应用
  11. Android使用okhttp加载图片
  12. 解决微信插件wxparse图片大小不能改变的问题
  13. OSx86的来龙去脉
  14. 网吧无盘服务器进u盘启动,利用U盘启动在网吧免费上网
  15. 第十届山东理工大学ACM网络编程擂台赛 重现
  16. Win11想运行老游戏怎么设置
  17. 恶劣天气 3D 目标检测数据集收集
  18. jenkins集成自动化配置(二) 创建项目和项目配置
  19. java unicode 我爱你,各语言解决\\u6211%u6211\u6211问题
  20. DA数模转换 DAC0832 笔记

热门文章

  1. docker容器修改开机启动服务器,docker-修改容器挂载目录的3种方法小结
  2. 解决网页中不能复制文字的问题
  3. hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
  4. spingboot实现redis的发布订阅
  5. JAVA 构建使用 Native 库
  6. OpenCV:OpenCV图像旋转的代码
  7. EKF优化:协方差coff公式、意义、SLAM中的Code优化
  8. Allegro PCB Design GXL (legacy) 由零散的对象构成一个Shape
  9. LNSYOJ201小胖的奇偶【并查集+离散化】【做题报告】
  10. Maven_在Eclipse中执行Maven命令