設計模式 (二)工廠模式

2021-09-13 00:06:50 字數 2994 閱讀 2684

昨天看了一下工廠模式,發現大部分概念都太官方,不想看,所以我今天自己用**來擼了一遍,如果有不對的地方,歡迎博友討論。**請註明出處!

文字不多,主要通過**來理解,概念請結合**去網上搜

場景:某汽車公司老闆讓你設計乙個汽車介面,介面用來開車駕駛,例如汽車有寶馬、奧迪、賓士....

首先抽象出car類

public inte***ce car
假如我們有寶馬和奧迪:

public class bwm implements car 

@override

public void drive()

}

public class audi implements car 

@override

public void drive()

}

抽象類和實體類都完成了,那麼就要進行工廠類設計

簡單工廠很簡單,就是定義乙個工廠factory用來生產汽車就可以了

public class ca***ctory  else if ("audi".equals(carname))  else 

}// 簡單工廠模式: 二

public static car produceaudi()

public static car producebwm()

}

對,就是這麼簡單,所以才叫簡單工廠,接下來測試一下:

public class test 

}

奧迪

drive audi

寶馬drive bwm

工廠模式比簡單工廠模式來說,它對工廠也進行了抽象

car抽象、audi,bwm實體類不變

首先加乙個汽車抽象工廠(跟簡單工廠不一樣,這裡的工廠是乙個抽象介面,讓audi和bwm去實現這個抽象工廠)

public inte***ce carabstractfactory
public class bwmfactory implements carabstractfactory 

}

public class audifactory implements carabstractfactory 

}

測試一下:

public class test 

}

奧迪

drive audi

寶馬drive bwm

為什麼要用工廠模式?工廠模式與簡單工廠模式相比有哪些優缺點? 這裡我從網上沒找到標準答案,我覺得看個人專案,都是可以用的。

抽象工廠其實用到的不多,這裡還是一位汽車為例,來講一下

假如:汽車型別是分為越野和轎車,那寶馬當然也分為越野寶馬和轎車寶馬,奧迪同理

老闆跟你說,我們要的介面是根據車型來生產,而不是簡單分為寶馬和奧迪了,這個時候,抽象工廠就派上用場了

抽象工廠有個產品族的概念,可以去網上搜一下,我的理解就是乙個產品中的一種特徵集合,例如汽車這個抽象中,又分為了越野汽車和普通轎車

同樣先定義個汽車抽象類

public abstract class car
public abstract class audi extends car 

@override

public void drive()

}

public abstract class bwm extends car 

@override

public void drive()

}

老闆不是說了要分為越野和轎車麼?

那麼就要很對奧迪和寶馬來分別定義兩種產品

public class audiyueye extends audi 

}

public class audijiaoche extends audi 

}

public class bwmyueye extends bwm 

}

public class bwmjiaoche extends bwm 

}

汽車抽象定義了,奧迪和寶馬也定義了,產品族也分了,那麼接下來就是把工廠實現了

別忘了,老闆給你說的是要能生產越野和轎車的工廠,那麼一定會有兩個工廠,乙個是用來生產越野車,乙個是用來生產轎車

但是無論這兩個工廠生產什麼型別,汽車型別是我們定義好的,也就是抽象到了工廠裡面的。

所以我們需要1個抽象工廠類和2個工廠實現:

public inte***ce carabstractfactory
public class yueyeca***ctory implements carabstractfactory 

@override

public car createaudi()

}

public class jiaocheca***ctory implements carabstractfactory 

@override

public car createaudi()

}

至此抽象工廠的**也擼完了

測試:

public class test 

}

奧迪

drive audi

奧迪-越野車型

寶馬drive bwm

寶馬-轎車型別

二 設計模式 工廠模式

一.傳統時以pizza類舉例,乙個抽象類pizza,由幾個pizza實現類實現,主餐廳看看客戶點什麼便生產,但是如果需要增加新的pizza品種,則要增加乙個新的實現類,然後主餐廳裡增加對邏輯的判斷,顯然,違背了開放關閉原則。所以 工廠模式為解決某些需要生產大量一批類的問題 二.簡單工廠模式 定義了乙...

設計模式(二)工廠模式

與 模式不同,生產模式隱藏過程,只關注結果 簡單工廠,工廠方法,抽象工廠 一,簡單工廠模式 public inte ce car public class aodi implements car public class baoma implements car public class facto...

設計模式(二) 工廠模式

前言 我在面試的時候,有時候會問到候選人有沒有熟悉的設計模式,一般大部分候選人會選擇說熟悉單例和工廠 也有部分人會說熟悉觀察者 如果我進一步問候選人是如何應用工廠模式的,10個候選人有10個會舉連線sqlserver,oracle,mysql等不同資料庫時會用工廠模式產生不同的連線的例子。omg,我...