簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?

liulang68 發表於 2020-11-22

在這裡插入圖片描述
在這裡插入圖片描述

// 建立Reader物件的工廠
public class ReaderFactory {
    public static Reader getReader() throws FileNotFoundException {
        File file = new File("aa.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader reader = new BufferedReader(fileReader);
        return reader;
    }
}

public class FileOperateA {

    public static void main(String[] args) throws FileNotFoundException {


        //-------我有工廠了,還用自己搞嗎?不用了!
        //File file = new File("aa.txt");
        //FileReader fileReader = new FileReader(file);
        //BufferedReader bufferedReader = new BufferedReader(fileReader);
        //-------我有工廠了,還用自己搞嗎?不用了!

		// 用工廠來建立出物件
        Reader reader = ReaderFactory.getReader();

        // 讀寫檔案....
    }
}

工廠模式就是實現了程式碼的複用,避免我們寫重複的程式碼

在這裡插入圖片描述

簡單工廠模式相當於是一個工廠中有各種產品,建立在一個類中,客戶無需知道具體產品的名稱,只需要知道產品類所對應的引數即可。但是工廠的職責過重,而且當型別過多時不利於系統的擴充套件維護。工廠方法模式相當於在簡單工廠模式的基礎上增加一個抽象工廠,在簡單工廠模式下如果增加一個產品,要修改工廠類,不符合開閉原則。在工廠方法下,只需要增加具體工廠和具體產品即可。抽象工廠,類似於一個集團旗下生產的各種產品的工廠,這些產品是一個產品族。是在工廠方法下的擴充套件。比如一個產品的介面,可以通過直接改變具體工廠的例項來改變產品的介面風格。

在這裡插入圖片描述工廠方法做的事情就是對工廠進行了分工,但是每次我們new例項還是new的比較多,基本每生成一種水就要來一次

抽象工廠就幫我們解決了這個問題(幫我們建立了一個大的水廠,裡面有建造各種水的方法。同時我要生成新的水,我只需要繼承該抽象方法,把我新生成水的方法寫進去就可以了)

在這裡插入圖片描述