1. 程式人生 > >Java設計模式之 工廠模式

Java設計模式之 工廠模式

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設計模式之 原型模式