工廠方法模式

2021-07-12 00:23:32 字數 773 閱讀 7688

設計模式入門系列

在之前的專案中,如果需要建立某一型別的類的例項,我通常會專門寫乙個用來建立該類的類。以下面的例子為例,為了建立bmw和benz的例項,我通常會建乙個類似於ca***ctory的類,通過傳入乙個引數在該類的介面(比如說getinstance)中返回想要建立的類。

這種建立類的方式叫做簡單工廠模式。

這麼做的乙個問題是在getinstance中需要加入很多的判斷,每增加一種新的型別就需要在switch case的**中增加一種型別,這在物件導向程式設計中是不被推薦的;另外一種情況就是如果乙個引數不夠用了,需要增加一些新的引數來判斷,這就會導致建立該類的介面變得越來越複雜。

在我理解的工廠方法模式中,工廠相當於是對要建立的類的層次結構的抽象。工廠類必須要與其建立的類具有相同的層次結構,每乙個類的建立都可以通過乙個在工廠類層次結構中與其相同位置的工廠來建立。這樣既保留了對原來類結構的描述,又實現了最大程度上的解耦。

<?php

inte***ce

carclass

bmwimplements

car}

class

benz

implements

car}

inte***ce

factory

class

bmwfactory

implements

factory

}class

benzfactory

}

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

工廠方法模式(一) 簡單工廠方法模式

ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...