工廠方法模式:也叫工廠模式,屬於類創建型模式,工廠父類(接口)負責定義產品對象的公共接口,而子類工廠則負責創建具體的產品對象。
目的:是為了把產品的實例化操作延遲到子類工廠中完成,通過工廠子類來決定究竟應該實例化哪一個產品具體對象。
工廠方法模式包含四個部分:
1.抽象產品:產品對象同一的基類,或者是同一的接口。
2.具體的產品:各個不同的實例對象類
3.抽象工廠:所有的子類工廠類的基類,或是同一的接口
4.具體的工廠子類:負責每個不同的產品對象的實際創建
具體的實例代碼:
1.抽象的產品類:定義car 交通工具類下:
package factory.simple; /** * 抽象產品角色 交通工具接口 * * @author lilin * */ public interface Car { /** * 上班函數 */ void gotowork(); }
2.定義實際的產品類,總共定義兩個,bike 和bus 分別表示不同的交通工具類
package factory.simple; /** * 具體產品角色,自行車 * * @author lilin * */ public class Bike implements Car { @Override public void gotowork() { System.out.println("騎自行車去上班!"); } }
package factory.simple; /** * @author lilin * */ public class Bus implements Car { @Override public void gotowork() { System.out.println("坐公交車去上班!"); } }
3.抽象的工廠接口定義如下:、
/** * */ package factory.factory; import factory.simple.Car; /** * @author lilin * */ public interface ICarFactory { /** * 獲取交通工具 * * @return */ Car getCar(); }
4.具體的工廠子類,分別為每個具體的產品類創建不同的工廠子類:
/** * */ package factory.factory; import factory.simple.Bike; import factory.simple.Car; /** * @author lilin * */ public class BikeFactory implements ICarFactory { @Override public Car getCar() { return new Bike(); } }
/** * */ package factory.factory; import factory.simple.Bus; import factory.simple.Car; /** * @author lilin * */ public class BusFactory implements ICarFactory { @Override public Car getCar() { return new Bus(); } }
最后,使用簡單的測試類,來驗證下 不同的工廠能夠產生不同的產品對象:測試類如下:
/** * */ package factory.factory; import org.testng.annotations.Test; import factory.simple.Car; /** * @author lilin * */ public class TestFactory { @Test public void test() { ICarFactory factory = null; // bike factory = new BikeFactory(); Car bike = factory.getCar(); bike.gotowork(); // bus factory = new BusFactory(); Car bus = factory.getCar(); bus.gotowork(); } }
打印結果如下:
騎自行車去上班!
坐公交車去上班!
工廠模式,可以理解為:有了很多個工廠方法,自己需要哪一個產品,就調用當前產品的工廠方法,獲取相應的具體實例。