[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());
    }
}
复制代码

 

posted @   唯一客服系统开发笔记  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-10-13 [PHP] 配置vscode的语法检测消除提示Cannot validate since no PHP executable is set
2019-10-13 [Linux] deepin系统添加PHP仓库源出错Error: could not find a distribution template for Deepin/stable
点击右上角即可分享
微信分享提示
1
chat with us