設計模式之工廠模式

2021-08-21 03:56:43 字數 2098 閱讀 3903

工廠模式分為三類:

1.簡單工廠模式

2.工廠方法模式

3.抽象工廠模式

這三種模式從上到下逐步抽象

簡單工廠模式其實邏輯很簡單,其核心思想就是根據傳入的引數返回不同的物件,物件的建立過程由自定義的乙個類去完成,也就是所說的工廠,這裡以水果為例

先定義乙個水果類通用介面

public inte***ce fruit
水果實現介面

@override

public void category()

}

public class banana implements fruit 

}

public class peach implements fruit

}

工廠類

public class fruitfactory  else if (fruit.equalsignorecase("banana"))  else if (fruit.equalsignorecase("peach"))  else

throw new exception();

}}

簡單工廠模式就是這麼簡單,相信大家一定也發現了很多問題,這種模式下想要擴充套件是很不容易的,需要改動工廠類的**,為了避免這種情況工廠方法模式應運而生了

簡單工廠模式與工廠方法模式最大的區別在於簡單工廠模式只有乙個工廠,需要什麼就傳遞對應的引數去取,而工廠方法模式是對不同的物件有特定的工廠,這些工廠實現了總工廠的介面,所以在總工廠中呼叫就可以獲取到相應的產品

先將水果工廠改造為介面

public inte***ce fruitfactory
@override

public fruit getfruit() }

同樣的方式建立其他水果工廠

public class bananafactory implements fruitfactory 

}

然後需要哪種水果直接在水果**廠呼叫

public class eatfruit 

}

工廠方法模式在簡單工廠模式上進行了一些擴充套件,可以適用於更多的場景,並且在後續需要新增其他子產品時只需要建立工廠去實現總工廠即可,相比簡單工廠模式的擴充套件性要好很多

抽象工廠模式在工廠方法模式上又進行了進一步的擴充套件,將同系列產品再次建立到同乙個工廠,假如現在除了水果之外我們再生產乙個水果汁的產品

水果汁類的介面

public inte***ce juice
蘋果和香蕉都能生產水果汁,所以去實現這個水果汁介面

@override

public void category()

}

public class bananajuice implements juice 

}

接下來建立乙個生產水果漬的工廠介面

public inte***ce juicefactory
因為我們的產品線的擴充,以前的水果裝配廠已經不能滿足需求了,我們除了要在建立乙個生產水果汁的工廠之外,還需要由乙個水果**廠進行排程,例如給**廠蘋果就可以按需求生產蘋果和蘋果汁

public inte***ce finalfactory
改造原來的水果廠的生產線,使其可以生產同型別的兩種產品

@override

public fruit getfruit()

@override

public juice getjuice()

}

public class bananafactory implements finalfactory 

@override

public juice getjuice()

}

最後呼叫工廠方法

public class eat 

}

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...