Java學習之工廠模式
阿新 • • 發佈:2018-11-23
工廠模式 實現了建立者和呼叫者的分離。
工廠模式的核心本質:
– 例項化物件,用工廠方法代替new操作。
– 將選擇實現類、建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦。
1 簡單工廠模式
簡單工廠模式也叫靜態工廠模式,就是工廠類一般是使用靜態方法,通過接收的引數的不同來返回不同的物件例項。
下面演示使用簡單工廠類建立物件:
package designPat.SimpleFactory; /*** * 簡單工廠模式 * @author Administrator * */ public class SinmleCarFactory { static Car createCar(String type) { Car car; if("audi".equals(type)) { car=new AUDI(); }else if("bmw".equals(type)) { car=new BMW(); }else { return null; } return car; } } ------------------------------------------------- package designPat.SimpleFactory; public class Car { void run() { } } -------------------------------------------- package designPat.SimpleFactory; public class BMW extends Car { String name; public BMW() { name="寶馬"; } void run() { System.out.println(name+"跑的好快"); } } --------------------------------------------- package designPat.SimpleFactory; public class AUDI extends Car{ String name; public AUDI() { name="奧迪"; } void run() { System.out.println(name+"跑的和上面的一樣快"); } } ------------------------------------------- package designPat.SimpleFactory; public class Test { public static void main(String[] args) { Car b=SinmleCarFactory.createCar("bmw"); Car c=SinmleCarFactory.createCar("audi"); b.run(); c.run(); } }
2工廠方法模式
工廠方法模式和簡單工廠模式最大的不同在於,簡單工廠模式只有一個(對於一個專案或者一個獨立模組而言)工廠類,而工廠方法模式有一組實現了相同介面的工廠類。
工廠方法目模式支援增加任意產品。
符合了開閉原則。
但是類比簡單工廠多了好幾個,所以有點繁瑣。
實際開發中,還是使用簡單工廠比較多。
package designPat.factory; public interface CarCreate { Car createCar(); } ---------------------------------------------------- package designPat.factory; public class Car { String name; void run() { } } ------------------------------------------------------- package designPat.factory; public class Benz extends Car { Car car; void run() { System.out.println("賓士跑的好快"); } } ----------------------------------------------------- package designPat.factory; public class BenzCreate implements CarCreate { Car car; @Override public Car createCar() { return new Benz(); } } ------------------------------------------------------- package designPat.factory; public class Byd extends Car { Car car; void run() { System.out.println("BYD車好破,跑不動"); } } ------------------------------------------------------------------ package designPat.factory; public class BydCreate implements CarCreate{ @Override public Car createCar() { return new Byd(); } } ------------------------------------------------------------ package designPat.factory; public class Test { public static void main(String[] args) { Car benz = new BenzCreate().createCar(); benz.run(); Car byd = new BydCreate().createCar(); byd.run(); } }