工廠模式(一)-----簡單工廠------從java代碼和圖去理解

簡單工廠模式

定義

通過一個Factory類獲取在這個類下被定義的所有類,獲取的類使用者無法看到如何實例化出來的
生活中舉例:
客:我要買寶馬!!!
商家:您買哪款???
客:我買寶馬7系!!!

圖解(UML圖網上一大堆這裏就放個我自己畫的)

在這裏插入圖片描述

java代碼

接口

/**
 * 汽車類
 * 工廠模式頂層接口
 * 生活中類似於 這款車的品牌是寶馬
 * @author xiaokun
 */
public interface ICar {
	
}

枚舉類

/**
 * 汽車型號枚舉
 * 例如生活中  寶馬6,7,8系
 * @author xiaokun
 */
public enum CarType {
	BMW6,
	BMW7,
	BMW8
}

實現類(工廠中的產品)

/**
 * BWM6
 * 寶馬車的具體類型
 * @author xiaokun
 */
public class BMW6 implements ICar{
	public BMW6() {
		System.out.println("我選擇了寶馬6系");
	}
}

/**
 * BWM7
 * 寶馬車的具體類型
 * @author xiaokun
 */
public class BMW7 implements ICar{

	public BMW7() {
		System.out.println("我選擇了寶馬7系");
	}
}

/**
 * BWM8
 * 寶馬車的具體類型
 * @author xiaokun
 */
public class BMW8 implements ICar{
	public BMW8() {
		System.out.println("我選擇了寶馬8系");
	}
}

工廠類(列舉了2種內部方式)

/**
 * 商家
 * 寶馬汽車工廠類
 * @author xiaokun
 */
public class BMWCarFactoryBuilder {

	public static ICar BMWCarFactory(CarType ct)  {
		/*========================================
		 * 這是通過枚舉方式獲取所需要的對象
		switch (ct) {
		case BMW6: return new BMW6();
		case BMW7: return new BMW7();
		case BMW8: return new BMW8();
		default: return null;
		}
		===============================================*/
		//這裏可以通過配置文件達到鬆耦合的獲取對象,這裏使用枚舉模擬配置文件
		ICar car;
		try {
			car = (ICar) Class.forName("Factory.impl."+ct.name()).getConstructor().newInstance();
		} catch (Exception e) {
			return null;
		}
		return car;
	}
}

測試類

/**
 * 簡單工廠測試類
 * @author xiaokun
 */
public class Test {

	public static void main(String[] args) throws Exception {
		//遍歷枚舉檢查工廠類的情況
		for(CarType ct : CarType.values())
			BMWCarFactoryBuilder.BMWCarFactory(ct);
	}
}

測試結果

我選擇了寶馬6系
我選擇了寶馬7系
我選擇了寶馬8系
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章