Java設計模式之 工廠模式
阿新 • • 發佈:2018-11-08
Java設計模式 - 工廠模式
工廠模式使用場景:
工廠模式分為簡單工廠 工廠 抽象工廠模式. 當用戶需要一個類的子類例項,且不希望與該類的子類行成耦合或者不知道該類有哪些子類可用時,可採用工廠模式; 當用戶需要系統提供多個物件,且希望和建立物件的類解耦時,可採用抽象工廠模式.
原始碼下載地址:
https://github.com/godlikecheng/Factory_model/
工廠模式的實現方式:
1.簡單工廠
定義小汽車介面
package factory_model; /** * 簡單工廠 - 定義小汽車介面:Icar.java * @author 張宜成 */ public interface ICar { // 由於工廠模式僅關係物件的建立,為說明方便,無需定義方法 }
定義高中低檔具體的小汽車
package factory_model; /** * 簡單工廠 - 定義高中低檔的小汽車 * 高檔小汽車:UpCar.java * @author 張宜成 */ public class UpCar implements ICar { }
package factory_model; /** * 簡單工廠 - 定義高中低檔的小汽車 * 中檔小汽車:MidCar.java * @author 張宜成 */ public class MidCar implements ICar { }
package factory_model; /** * 簡單工廠 - 定義高中低檔的小汽車 * 低檔小汽車:UpCar.java * @author 張宜成 */ public class DnCar implements ICar { }
簡單工廠
package factory_model; /** * 簡單工廠 * @author 張宜成 */ public class CarSimpleFactory { public static final String UPTYPE = "uptype"; public static final String MIDTYPE = "midtype"; public static final String DNTYPE = "dntype"; public static ICar create(String mark) { ICar obj = null; if(mark.equals(UPTYPE)) { // 如果是高檔型別 obj = new UpCar(); // 則建立高檔車物件 }else if (mark.equals(MIDTYPE)) { obj = new MidCar(); }else if (mark.equals(DNTYPE)) { obj = new DnCar(); } return obj; // 返回選擇的物件 } }
測試程式:
package factory_model;
/**
* 測試類
* @author 張宜成
*/
public class CarTest {
public static void main(String[] args) {
// 從工廠中建立物件
ICar obj = CarSimpleFactory.create("UPTYPE");
}
}
2.工廠
定義小汽車介面
package factory_model_02; /** * 工廠 - 定義小汽車介面:Icar.java * @author 張宜成 */ public interface ICar { // 由於工廠模式僅關係物件的建立,為說明方便,無需定義方法 }
定義高中低檔具體的小汽車
package factory_model_02; /** * 工廠 - 定義高中低檔的小汽車 * 高檔小汽車:UpCar.java * @author 張宜成 */ public class UpCar implements ICar { }
package factory_model_02; /** * 工廠 - 定義高中低檔的小汽車 * 中檔小汽車:MidCar.java * @author 張宜成 */ public class MidCar implements ICar { }
package factory_model_02; /** * 工廠 - 定義高中低檔的小汽車 * 低檔小汽車:UpCar.java * @author 張宜成 */ public class DnCar implements ICar { }
定義抽象工廠
package factory_model_02; /** * 定義抽象工廠 * */ public abstract class AbstractFactory { // 定義抽象方法 public abstract ICar create(); }
定義抽象工廠實現類
package factory_model_02; /** * 定義高檔小汽車工廠 * @author 張宜成 */ public class UpFactory extends AbstractFactory{ public ICar create() { return new UpCar(); // 高檔工廠生成高檔小汽車物件 } }
package factory_model_02; /** * 定義中檔小氣車工廠 * @author 張宜成 */ public class MidFactory extends AbstractFactory { public ICar create() { return new MidCar(); // 中檔工廠生成中檔小汽車物件 } }
package factory_model_02; /** * 定義抵擋小汽車工廠 * @author 張宜成 */ public class DnFactory extends AbstractFactory { public ICar create() { return new DnCar(); // 低檔工廠生成低檔小汽車物件 } }
測試類:
package factory_model_02;
/**
* 測試類
* @author 張宜成
*/
public class CarTest {
public static void main(String[] args) {
AbstractFactory obj = new UpFactory(); // 多型建立高檔工廠
ICar car = obj.create(); // 獲得高檔工廠中的小汽車物件
System.out.println(car);
}
}
3.抽象工廠
定義小汽車介面
package factory_model_03; /** * 抽象工廠 - 定義小汽車介面:Icar.java * @author 張宜成 */ public interface ICar { // 由於工廠模式僅關係物件的建立,為說明方便,無需定義方法 }
定義高中低檔具體的小汽車
package factory_model_03; /** * 抽象工廠 - 定義高中低檔的小汽車 * 高檔小汽車:UpCar.java * @author 張宜成 */ public class UpCar implements ICar { }
package factory_model_03; /** * 抽象工廠 - 定義高中低檔的小汽車 * 中檔小汽車:MidCar.java * @author 張宜成 */ public class MidCar implements ICar { }
package factory_model_03; /** * 抽象工廠 - 定義高中低檔的小汽車 * 低檔小汽車:UpCar.java * @author 張宜成 */ public class DnCar implements ICar { }
定義高中低檔具體的公共汽車
package factory_model_03; /** * 抽象工廠 - 高檔公共汽車類 * @author 張宜成 */ public class UpBus implements IBus{ }
package factory_model_03; /** * 抽象工廠 - 中檔公共汽車類 * @author 張宜成 */ public class MidBus implements IBus { }
package factory_model_03; /** * 抽象工廠 - 低檔公共汽車類 * @author 張宜成 */ public class DnBus implements IBus { }
定義抽象工廠
package factory_model_03; /** * 定義抽象類工廠 * @author 張宜成 */ public abstract class AbstractFactory { public abstract ICar create(); // 產生小汽車物件 public abstract IBus create2(); // 產生公共汽車類 }
定義抽象工廠實現類
package factory_model_03; /** * 定義高檔工廠類 * @author 張宜成 * */ public class UpFactory extends AbstractFactory { public ICar create() { return new UpCar(); // 高檔工廠生產高檔小汽車物件 } public IBus create2() { return new UpBus(); // 高檔工廠生成高檔公共汽車物件 } }
package factory_model_03; /** * 定義中檔工廠 * @author 張宜成 */ public class MidFactory extends AbstractFactory { public ICar create() { return new MidCar(); } public IBus create2() { return new MidBus(); } }
package factory_model_03; /** * 定義低檔工廠 * @author 張宜成 */ public class DnFactory extends AbstractFactory { public ICar create() { return new DnCar(); } public IBus create2() { return new DnBus(); } }
上一篇: java設計模式之 單例模式
下一篇: Java設計模式之 原型模式