23種設計模式之簡單工廠

  • 2019 年 10 月 4 日
  • 筆記

1

寫在前面的話

今天我們正式學習23種設計模式之工廠模式,這個模式主要分為三類(簡單工廠模式,工廠方法模式,抽象工廠模式),我會分章給大家講解。

首先來說說工廠模式到底有啥用?它主要作用在於實現了創建者和調用者的分離,啥子意思呢?也就是說我們調用者去創建實例時不會和創建的這個實例直接聯繫。

其核心本質就是實例化對象,用工廠方法代替new操作。

2

簡單工廠模式

–所謂簡單工廠模式

• 用來生產同一等級結構中的任意產品。(對於增加新的產品,需要修改已經寫好的代碼)

簡單工廠模式是最簡單的工廠模式也是使用最多的工廠模式,但是它仍然有不足-即違反了面向對象的OCP原則(開閉原則):一個軟件的實體應該對拓展開發,對修改關閉

我用一個代碼示例來解釋一下到底什麼是簡單工廠模式!

  1. 首先我們寫一個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裏面的代碼。

想要解決這個問題,我們可以使用方法工廠模式來解決!請關注下一篇文章!