工廠方法模式:也叫工廠模式,屬於類建立型模式,工廠父類(接口)負責定義產品對象的公共接口,而子類工廠則負責建立具體的產品對象。ide
目的:是爲了把產品的實例化操做延遲到子類工廠中完成,經過工廠子類來決定究竟應該實例化哪個產品具體對象。函數
工廠方法模式包含四個部分:工具
1.抽象產品:產品對象同一的基類,或者是同一的接口。測試
2.具體的產品:各個不一樣的實例對象類spa
3.抽象工廠:全部的子類工廠類的基類,或是同一的接口code
4.具體的工廠子類:負責每一個不一樣的產品對象的實際建立對象
具體的實例代碼:blog
1.抽象的產品類:定義car 交通工具類下:接口
package factory.simple; /** * 抽象產品角色 交通工具接口 * * @author lilin * */ public interface Car { /** * 上班函數 */ void gotowork(); }
2.定義實際的產品類,總共定義兩個,bike 和bus 分別表示不一樣的交通工具類get
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(); } }
打印結果以下:
騎自行車去上班!
坐公交車去上班!
工廠模式,能夠理解爲:有了不少個工廠方法,本身須要哪個產品,就調用當前產品的工廠方法,獲取相應的具體實例。