常說的幾種工廠模式就是如下幾種:
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
PreWriting
標題開玩笑,我可能喜歡開玩笑,大家都樂呵……
其中,在23中設計模式中,簡單工廠並不在其列,但是常常提起是因為它的思想也是“解耦”,並不能因為它不在23種設計模式中就不算它是設計模式,這種說法在我這裡認為是錯誤(不過這些也無所謂),讓程式碼整潔的設計就應該是設計模式,設計模式的初衷也是如此,如果不是怕別人說我偏執,我甚至願意管規範命名變數也叫設計模式(開個玩笑)。
另外,想與各位共勉的是:閱讀部落格,寫部落格,哪怕是閱讀書籍也要有專業的思考。在我複習設計模式的過程中,發現很多的部落格,說的根本不對或不貼切,這會給讀者帶來很大的學習成本,真是萬般無奈……如果有不同意見,歡迎各種形式探討和糾正,如果我有錯誤且您願意客氣點指正我,我會表示感謝。
正文
工廠模式,在我的理解中,主要的目的是構建物件與其他邏輯(業務邏輯)解耦,看這樣一段:
public class Main {
public static void main(String[] args) {
// 業務邏輯
System.out.println("1");
System.out.println("2");
System.out.println("3");
Example example = new Example();
example.setF1("f1");
example.setF2("f2");
example.setF3("f3");
example.setF4("f4");
// 業務邏輯
example.doDaDa();
System.out.println("1");
System.out.println("2");
System.out.println("3");
}
}
@Data
class Example {
private String f1;
private String f2;
private String f3;
private String f4;
public void doDaDa(){}
}
別管這個物件(example)是有多複雜,你要怎麼構建——呼叫setter嗎?讀配置檔案嗎?這些都只是要引入一種設計模式的原因,因為new的方式已經讓程式碼變得混亂了。當你想把構建物件這一段與使用物件這一段還有其他邏輯解耦,你就可以使用工廠模式了。至於你覺得它有好多setter(故意加了多一點屬性),每一個工廠都要寫一遍真的很醜,你甚至可以在工廠裡面用建造者模式去構建它,這些都無所謂,因為使用工廠的目的就不在這,真正的目的是解耦。而同類(構建型設計模式)的剛剛提過的建造者模式,注重的是將物件構建出來,二者在使用Example物件的客戶端來看似乎區別不大,都是獲得了一個物件,深究還是可以發現上述的差別。
具體的實現方式和類圖,這一篇寫的很全:[工廠模式——這一篇真夠了_Java_大頭星_InfoQ寫作社群](https://xie.infoq.cn/article/88c926822394aa1c80847dd2a#:~:text=工廠模式可以分為三類: 1 簡單工廠模式(Simple Factory) 2,工廠方法模式(Factory Method) 3 抽象工廠模式(Abstract Factory))
PostWriting
在檢索優秀的博文的時候我看到了一篇寫的非常好的博文,裡面說的很多東西讓我感覺相見恨晚,想法不謀而合,怒貼此處以供日後反覆欣賞:什麼是工廠模式?工廠模式的作用?為什麼要使用工廠模式?_工廠模式解決了什麼問題-CSDN部落格