工廠方法(Factory Method)

jdon發表於2019-07-10

目的

定義一個用於建立物件的介面,但讓子類決定要例項化哪個類。Factory Method允許類將例項化推遲到子類。

說明

鐵匠製造武器。精靈需要精靈武器,獸人需要獸人武器。根據顧客,召喚正確型別的鐵匠。

簡而言之,它提供了一種將例項化邏輯委託給子類的方法。

維基百科說

在基於類的程式設計中,工廠方法模式是一種建立型模式,它使用工廠方法來處理建立物件的問題,而無需指定將要建立的物件的確切類。在介面中指定並由子類實現,或者在基類中實現並可選地由派生類覆蓋 ,這是通過呼叫工廠方法建立物件來完成的, 而不是通過呼叫建構函式。

程式化示例

以上面的鐵匠為例。首先,我們有一個鐵匠介面和它的一些實現

public interface Blacksmith {
  Weapon manufactureWeapon(WeaponType weaponType);
}

public class ElfBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return new ElfWeapon(weaponType);
  }
}

public class OrcBlacksmith implements Blacksmith {
  public Weapon manufactureWeapon(WeaponType weaponType) {
    return new OrcWeapon(weaponType);
  }
}

現在,隨著顧客的到來,召喚正確型別的鐵匠並製造所需的武器

Blacksmith blacksmith = new ElfBlacksmith();
blacksmith.manufactureWeapon(WeaponType.SPEAR);
blacksmith.manufactureWeapon(WeaponType.AXE);
// Elvish weapons are created

適用場景

  • 類無法預測它必須建立的物件的類
  • 類希望它的子類指定它建立的物件
  • 類將責任委託給幾個幫助子類之一,並且該幫助子類的具體內容就是被委託的職責。

相關文章