1. 程式人生 > 實用技巧 >[PHP] 抽象工廠設計模式-建立型設計模式

[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()); } }