本博客主要介紹簡單工廠模式(Simple Factory),簡單工廠模式是建立型模式的一員,也是咱們平時coding用到的比較多的一個模式了。java
首先,讓咱們思考如下的需求:ide
博主,忽然很想吃宮保雞丁和西紅柿炒雞蛋,那麼博主的需求怎樣才能獲得知足呢?
當咱們沒有修煉過 簡單工廠模式 這本祕籍,我會本身動手作:學習
首先我會上百度搜索到製做那兩個菜的方法:測試
KungPaoChicken.java:spa
public class KungPaoChicken { private String name = "宮保雞丁"; @Override public String toString() { return name; } }
TomatoEgg.javacode
public class TomatoEgg { private String name = "西紅柿炒雞蛋"; @Override public String toString() { return name; } }
而後我開始製做這兩個菜:對象
Custom.javablog
public class Custom { public static void main(String... args) { KungPaoChicken kungPaoChicken = new KungPaoChicken(); TomatoEgg tomatoEgg = new TomatoEgg(); System.out.println(kungPaoChicken); System.out.println(tomatoEgg); } }
全部的東西都是咱們本身去操做。繼承
下面咱們給出了上面的代碼的uml類圖:博客
定義:提供一個建立對象實例的功能,而無需用戶本身去建立,無需關注具體實現。
類圖:
上面的類途中一共有三個角色:
經過簡單工廠的學習,博主忽然想去開一個飯店,這樣顧客只須要付錢而且點菜就能夠吃到想吃的菜了,想一想是否是很方便。
首先,咱們須要一個 抽象產品 :
Food.java:
public interface Food { void eat(); }
而後, 具體的產品 :
KungPaoChicken.java:
public class KungPaoChicken implements Food { @Override public void eat() { System.out.println("吃宮保雞丁"); } }
TomatoEgg.java:
public class TomatoEgg implements Food { @Override public void eat() { System.out.println("吃西紅柿"); } }
最後,咱們建立工廠:
MyHotal.java:
public class MyHotal { public Food createFood(String foodName) { switch(foodName) { case "KungPaoChicken": return new KungPaoChicken(); case "TomatoEgg": return new TomatoEgg(); default: return null; } } }
那麼咱們來測試一下:
Custom.java:
public class Custom { public static void main(String ...args) { MyHotal myHotal = new MyHotal(); Food kungPaoChicken = myHotal.createFood("KungPaoChicken"); Food tomatoEgg = myHotal.createFood("TomatoEgg"); kungPaoChicken.eat(); tomatoEgg.eat(); } }