文章出處
文章列表
簡單工廠概念
又叫做靜態工廠方法(Static Factory Method)模式,由一個工廠對象決定創建出哪一種產品類的實例。
代碼示例
Car是要得到的目標類型,BigCar、MiniCar可能的不同具體的產品,有可能擴展。
CarFactory定義了不同品牌Car的獲取方式。
interface Car {
String getBrand();
}
class BigCar implements Car {
@Override
public String getBrand() {
return "Big";
}
}
class MiniCar implements Car {
@Override
public String getBrand() {
return "Mini";
}
}
class CarFactory {
public static Car makeCar(int type) {
switch(type) {
case 1:
return new BigCar();
case 2:
return new MiniCar();
}
return null;
}
}
客戶端代碼使用CarFactory,傳遞不同的type獲取不同的Car。
void carTest() {
// 獲取car的代碼-需要作出對不同type的選擇
Car car = CarFactory.makeCar(1);
// 使用Car做操作的代碼-無需改變
car.getBrand();
}
解讀
工廠類是獲取產品對象的地方,封裝了獲取不同產品對象的選擇和創建細節。
創建過程得以控制,選擇返回不同的產品。
缺點:選擇和創建在一起,高內聚。不斷修改。
案例
jdbc
Class.forName(String driverClass);
DataManager.getConnection(string url, String user, String pass);
(本文使用Atom編寫)
工廠方法概念
定義一個用于創建對象的接口,實現類(子類)決定要實例化的具體對象,使得對要用的類的實例化延遲到子類。
類結構圖
代碼示例
Car是要得到的目標類型,CarFactory定義了抽象的獲取方式。
interface Car {
String getBrand();
}
interface CarFactory {
Car makeCar();
}
BigCar是一種Car,BigCarFactory用來獲取它。
class BigCar implements Car {
@Override
public String getBrand() {
return "Big";
}
}
class BigCarFactory implements CarFactory {
@Override
public Car makeCar() {
return new BigCar();
}
}
在通過CarFactory獲取Car并使用的代碼中,唯一需要變動的地方是“選擇哪個工廠類”。
void carTest() {
// 這里選擇要使用的CarFactory
CarFactory factory = new BigCarFactory();
// 獲取car的代碼-無需改變
Car car = factory.makeCar();
// 使用Car做操作的代碼-無需改變
car.getBrand();
}
解讀?
當需要的產品類型要應對變化時:
使用上,先得到一個工廠——這是唯一需要作出選擇的地方,也是可能變化的地方。
把工廠的選擇交給調用者代碼,而生產哪個產品對象的邏輯是工廠子類決定的。
增加工廠類和產品類,客戶端代碼本身由于業務變動的起點——唯一需要修改的地方。
符合開閉原則:對擴展開放,對修改關閉。
(本文使用Atom編寫)
文章列表
全站熱搜