[PHP] 抽象工廠設計模式-建立型設計模式
阿新 • • 發佈:2020-10-13
抽象工廠:
在不指定具體類的情況下建立一系列相關或從屬物件。
通常,建立的類都實現相同的介面。抽象工廠的客戶端並不關心這些物件的建立方式,只是知道它們如何組合在一起。
三個抽象類
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()); } }