# 前言 本文主要講述**工廠模式**,文中使用通俗易懂的案例,使你更好的學習本章知識點並理解原理,做到有道無術。 # 一.什麼是工廠模式 工廠模式是23種設計模式中**創建型模式**的一種,它是一個最簡單的對象創建管理方式,根據調用方傳遞的類型來創建對象並返回。封裝了對象創建的過程,降低了程式模塊 ...
前言
本文主要講述工廠模式,文中使用通俗易懂的案例,使你更好的學習本章知識點並理解原理,做到有道無術。
一.什麼是工廠模式
工廠模式是23種設計模式中創建型模式的一種,它是一個最簡單的對象創建管理方式,根據調用方傳遞的類型來創建對象並返回。封裝了對象創建的過程,降低了程式模塊之間的耦合度。
二.生活中的工廠模式
1.沙縣小吃
江帥記得沙縣有炒飯、炒粉、雲吞、餛飩、蒸餃、湯等各種各樣的餐品,而你在沙縣只需要告訴老闆你想要什麼並付款,老闆會製作好相關的食物給到你,你不需要瞭解食物到底是怎麼樣製作出來的,只需要傳遞需求就能獲取想要的東西,這就跟設計模式的工廠模式很相似。
2.金拱門(麥當勞)與開封菜(KFC)
麥當勞和肯德基是著名的快餐店,有諸多食品,比如漢堡。漢堡這個食物是由他們提供給我們的,而我們只需要告訴餐廳我們需要的是哪個漢堡並付錢就可以了,具體他們是怎麼完成這個漢堡的,就不需要我們去考慮了,而這就像設計模式的工廠模式一樣。
3.茶餐廳
這些茶餐廳也跟其他餐飲一樣,你只需要告訴店員你想要的餐品並付款,後廚就能跟你的需求製作出你點的美食,你也無需關註它如何製作出來的,這也就跟設計模式的工廠模式很相似。
三.工廠模式的實現
接下來江帥以一家茶餐廳來舉例,用工廠模式來實現。先創建一個抽象產品類食物類和兩個具體產品類奶茶類和三明治類
package com.qianfeng.ran
/\*
* @author:江帥
*
* 抽象產品
* 定義一個所有食物的抽象父類:食物類
\*/
public abstract class Food{
//定義一個列印當前食物名的方法
void pirntName();
}
/\*
* 具體產品
* 創建一個繼承食物類的子類:奶茶類
\*/
class MikeTea extends Food{
//重寫父類的抽象方法
public void printName(){
System.out.println("奶茶");
}
}
/\*
* 具體產品
* 創建一個繼承食物類的子類:三明治類
\*/
class Sandwich extends Food{
//重寫父類的抽象方法
public void printName(){
System.out.println("三明治");
}
}
再創建一個具體工廠,類似茶餐廳
package com.qianfeng.ran
/*
* @author:江帥
*
* 具體工廠
* 定義一個工廠類:茶餐廳
*/
public class TeaRestaurantFactory{
//定義一個根據需求返回具體食物對象的靜態方法,類似廚房
public static Food kitchen(String type){
//判斷傳遞進來的需求是否為 null ,為 null 則返回 null 對象
if(type == null){
return null;
}
//根據需求返回對應的食物對象
if("1".equals(type)){ //假設傳遞"1"為需要奶茶
//返回奶茶對象
return new MikeTea();
}else if("2".equals(type)){//假設傳遞"2"為需要三明治
//返回三明治對象
return new Sandwich();
}
}
}
最後通過工廠類(茶餐廳)調用對應的靜態方法(廚房)並傳遞需求(字元串)獲取對象(食物)
package com.qianfeng.ran
/*
* @author:江帥
*
* 客戶端
*/
public class Demo{
public static void main(String[] args){
//調用工廠類的靜態方法,並傳遞字元串"1"獲取奶茶對象
Food mikeTea = TeaRestaurantFactory.kitchen("1");
//執行結果:
//"奶茶"
System.out.println(mikeTea.printName());
//調用工廠類的靜態方法,並傳遞字元串"2"獲取三明治對象
Food sandwich = TeaRestaurantFactory.kitchen("1");
//執行結果:
//"三明治"
System.out.println(sandwich.printName());
}
}
四.配套視頻
如果你不習慣閱讀技術文章,或是對文中的技術概念不能很好地理解,可以來看看江帥幫你篩選出的視頻教程。
五.總結
在工廠模式中,咱們只需要傳遞需求給工廠類的方法,就能獲取我們所需要的對象,從而降低類與類之間的耦合度,我們也無需瞭解類的創建過程和對象的創建過程,只需要關註對象的使用即可。
但是工廠模式有個弊端,就是每添加多一個具體產品類,則需要改動工廠類里的方法,這就違背了設計模式中的開閉原則。就像茶餐廳里多一個菜品時,我們就需要更新菜單。
下一章,我們將帶大家學習企業的運行模式(設計模式之抽象工廠模式)。