[PHP] 抽象工厂设计模式-创建型设计模式
时间:2022-07-28
本文章向大家介绍[PHP] 抽象工厂设计模式-创建型设计模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
抽象工厂: 在不指定具体类的情况下创建一系列相关或从属对象。最重要的特征就是抽象类的组合. 通常,创建的类都实现相同的接口。抽象工厂的客户端并不关心这些对象的创建方式,只是知道它们如何组合在一起。
三个抽象类
interface WriterFactory{
public function createCsvWriter(): CsvWriter;
public function createJsonWriter(): JsonWriter;
}
interface CsvWriter{
public function write(array $line): string;
}
interface JsonWriter{
public function write(array $data, bool $formatted): string;
}
分为linux下和win下的六个具体实现类: UnixWriterFactory WinWriterFactory 这俩就是传说中的抽象工厂, 生成下面的抽象类的具体实例 UnixCsvWriter WinCsvWriter UnixJsonWriter WinJsonWriter
具体使用:
具体使用:
class AbstractFactoryTest extends TestCase{
//提供工厂,提供了两个系统下的工厂
public function provideFactory()
{
return [
[new UnixWriterFactory()],
[new WinWriterFactory()]
];
}
//使用提供的工厂,创建对象,当我们在定义参数类型时都可以直接使用抽象类的名字来定义
public function testCanCreateCsvWriterOnUnix(WriterFactory $writerFactory)
{
$this->assertInstanceOf(JsonWriter::class, $writerFactory->createJsonWriter());
$this->assertInstanceOf(CsvWriter::class, $writerFactory->createCsvWriter());
}
}
- WebComponent魔法堂:深究Custom Element 之 面向痛点编程
- 修复bootstrap daterangepicker中的3个问题
- 搭建AngualarJS开发环境
- CSS魔法堂:重拾Border之——更广阔的遐想
- Jboss EAP:native management API学习
- linux:手动校准系统时间和硬件CMOS时间
- CSS3魔法堂:说说Multi-column Layout
- 数据可视化-EChart2.0使用总结2
- rpc框架之 thrift 学习 2 - 基本概念
- rpc框架之avro 学习 1 - hello world
- 探讨Android中的内置浏览器和Chrome
- java并发编程学习: 阻塞队列 使用 及 实现原理
- CSS魔法堂:说说Float那个被埋没的志向
- Netbeans配置Xdebug
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Python 基础(三):我是一个数字
- 【译】Flutter架构综述
- 【tcl学习】vivado write_project_tcl
- 你不知道的LinkedList(一):基于jdk1.8的LinkdeList源码分析
- SAP CRM Application Extension Tool(AET)扩展字段的渲染原理
- 使用nodejs将SAP Fiori应用置于本地Launchpad运行
- 使用nodejs运行SAP Fiori应用
- JUnit 注解@Category的工作原理
- JUnit 注解@RunWith的工作原理
- Java|快速掌握java判断语句的用法
- Oh!老伙计,提高自己的并发技能,先从锁优化开始吧
- iOS开发之WidgetKit
- 六、玩转Git三剑客-初识GitHub
- Python|自制二维码生成器
- HBase豆知识