簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類(或者父接口)。
簡單工廠模式的 UML 圖:
(1)抽象(Product)產品角色:簡單工廠模式所創建的所有對象的父類,注意,這里的父類可以是接口也可以是抽象類,它負責描述所有實例所共有的公共接口。
(2)具體產品(Concrete Product)角色:簡單工廠所創建的具體實例對象,這些具體的產品往往都擁有共同的父類。
(3)工廠角色(Creator):這是簡單工廠模式的核心,由它負責創建所有的類的內部邏輯。當然工廠類必須能夠被外界調用,創建所需要的產品對象。
代碼:
(1)抽象產品角色:
package com.liwei.factory.simple; /** * 抽象(Product)產品角色 * 負責描述所有實例的公共接口 * @author Administrator * */ public interface Doll { public void getInfo(); }
(2)具體產品角色
package com.liwei.factory.simple; public class BarbieDoll implements Doll { @Override public void getInfo() { System.out.println("我是芭比娃娃"); } }
package com.liwei.factory.simple; public class ClothDoll implements Doll { @Override public void getInfo() { System.out.println("我是布娃娃"); } }
(3)工廠角色:
package com.liwei.factory.simple; public class DollFactory { public static Doll getInstance(String name){ if("barbie".equals(name)){ return new BarbieDoll(); }else if("cloth".equals(name)){ return new ClothDoll(); }else{ return null; } } }
(4)測試類:
package com.liwei.factory.simple; public class Client { public static void main(String[] args) { Doll doll1 = DollFactory.getInstance("cloth"); doll1.getInfo(); Doll doll2 = DollFactory.getInstance("barbie"); doll2.getInfo(); } }
由原來的直接依賴,變為依賴工廠了。只是把依賴關系轉移了。