23種設計模式之簡單工廠
- 2019 年 10 月 4 日
- 筆記
1
寫在前面的話
今天我們正式學習23種設計模式之工廠模式,這個模式主要分為三類(簡單工廠模式,工廠方法模式,抽象工廠模式),我會分章給大家講解。
首先來說說工廠模式到底有啥用?它主要作用在於實現了創建者和調用者的分離,啥子意思呢?也就是說我們調用者去創建實例時不會和創建的這個實例直接聯繫。
其核心本質就是實例化對象,用工廠方法代替new操作。
2
簡單工廠模式
–所謂簡單工廠模式
• 用來生產同一等級結構中的任意產品。(對於增加新的產品,需要修改已經寫好的代碼)
簡單工廠模式是最簡單的工廠模式也是使用最多的工廠模式,但是它仍然有不足-即違反了面向對象的OCP原則(開閉原則):一個軟件的實體應該對拓展開發,對修改關閉

我用一個代碼示例來解釋一下到底什麼是簡單工廠模式!
- 首先我們寫一個Animal.java接口
public interface Animal { void speak(); }
這裡我們給了動物一個屬性—–叫
2. 然後我們分別創建 Dog.java和Cat.java兩個類,並且分別都繼承Animal接口
public class Cat implements Animal { @Override public void speak() { System.out.println("喵喵喵!"); } }
public class Dog implements Animal { @Override public void speak() { System.out.println("汪汪汪!"); } }
3. 接下來我們來創建我們的動物工廠 AnimalFactory.java,並且在裏面寫一個創建動物的方法–CreateAnimal(String type) 並傳入一個類型的參數。
public class AnimalFactory { public static Animal createAnimal(String type){ if ("貓".equals(type)){ // 對類型進行判斷,並返回各自的對象 return new Cat(); }else if ("狗".equals(type)){ return new Dog(); }else { return null; } } }
4. 最後一步就是來測試我們的代碼了,我們創建一個Test.java
public class Test { public static void main(String[] args){ Animal a1 = AnimalFactory.createAnimal("貓"); a1.speak(); Animal a2 = AnimalFactory.createAnimal("狗"); a2.speak(); } }
運行後的結果:
喵喵喵! 汪汪汪! Process finished with exit code 0
從上面代碼可以看出,我們沒有通過 new Cat()或者 new Dog()來創建這些對象,而是通過 createAnimal()這個方法來創建對象,所以實現了創建者和調用者的分離。
但是上面也說過,這種方法存在缺點就是違反了面向對象原則的OCP原則,如果我們再添加一種動物,那麼我們必須去修改AnimalFactory裏面的代碼。
想要解決這個問題,我們可以使用方法工廠模式來解決!請關注下一篇文章!
