文章出處

簡單工廠概念

又叫做靜態工廠方法(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編寫)


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()