php設計模式-抽象原廠模式

來源:互聯網
上載者:User
概念

為建立一組相關或相互依賴的對象提供一個介面,而且無需指定他們的具體類

特點

抽象原廠模式(Abstact Factory)是一種常見的軟體設計模式,該模式為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此系列的產品族建立一個具體的工廠類。

主要角色

抽象工廠(Abstract Factory)角色:它聲明一個建立抽象產品對象的介面。通常以介面或抽象類別實現,所有的具體工廠類必須實現這個介面或繼承這個類。

具體工廠(Concrete Factory)角色:實現建立產品對象的操作。用戶端直接調用這個角色建立產品的執行個體。這個角色包含有選擇合適的產品對象的邏輯。通常使用具體類實現。

抽象產品(Abstract Product)角色:聲明一類產品的介面。它是Factory 方法模式所建立的對象的父類,或它們共同擁有的介面。

具體產品(Concrete Product)角色:實現抽象產品角色所定義的介面,定義一個將被相應的具體工廠建立的產品對象。其內部包含了應用程式的商務邏輯。

優缺點

抽象原廠模式的優點:

1、分離了具體的類

2、使增加或替換產品族變得容易

3、有利於產品的一致性

抽象原廠模式的缺點:

難以支援新種類的產品。這是因為AbstractFactory介面確定了可以被建立的產品集合。支援新各類的產品就需要擴充訪工廠介面,從而導致AbstractFactory類及其所有子類的改變。

抽象工廠就是以一種傾斜的方式支援增加新的產品中,它為新產品族的增加提供了方便,而不能為新的產品等級結構的增加提供這樣的方便。

適用性

1、一個系統不應當依賴於產品類執行個體如何被建立、組合和表達的細節,這對於所有形態的原廠模式都是重要的。

2、這個系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。

3、 同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。

4、系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使用用戶端不依賴於實現

抽象原廠模式執行個體

createCat();        $cat->Voice();        $dog = $AnimalFactory->createDog();        $dog->Voice();    }}Client::main();?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.