抽象工廠:
在不指定具體類的情況下創建一系列相關或從屬物件,最重要的特征就是抽象類的組合.
通常,創建的類都實作相同的介面,抽象工廠的客戶端并不關心這些物件的創建方式,只是知道它們如何組合在一起,
三個抽象類
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()); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/170997.html
標籤:PHP
