關於工廠模式的思考

pidanhub發表於2024-03-29

常說的幾種工廠模式就是如下幾種:

  • 簡單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

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部落格

相關文章