1. 程式人生 > >工廠方法(FactoryMethod)

工廠方法(FactoryMethod)

多個 family interface sys 實現 它的 ans sta 指定

概述:定義一個用於創建對象的接口,讓子類決定實例化哪一個類(使一個類的實例化延遲到其子類)
適用性:
  1. 當一個類不知道它必須創建的對象的類的時候
  2. 當一個類希望由它的子類來指定它所創建的對象的時候
  3. 當類將創建對象的職責委托給多個幫助子類中的某一個,並且你希望將“哪一個幫助子類是代理者”這一信息局部化的時候

舉例:
  1. public class TestFactoryMethod {
  2. public static void main(String[] args) {
  3. IWorkFactory s = new StudentWorkFactory();
  4. s.getWork().doWork();
  5. IWorkFactory
    t = new TeacherWorkFactory();
  6. t.getWork().doWork();
  7. }
  8. }
  9. interface IWorkFactory {
  10. Work getWork();
  11. }
  12. class StudentWorkFactory implements IWorkFactory{
  13. @Override
  14. public Work getWork() {
  15. return new StudentWork();
  16. }
  17. }
  18. class TeacherWorkFactory implements IWorkFactory{
  19. @Override
  20. public Work getWork() {
  21. return
    new TeacherWork();
  22. }
  23. }
  24. interface Work {
  25. void doWork();
  26. }
  27. class StudentWork implements Work {
  28. @Override
  29. public void doWork() {
  30. System.out.println("學生寫作業");
  31. }
  32. }
  33. class TeacherWork implements Work {
  34. @Override
  35. public void doWork() {
  36. System.out.println("老師改作業");
  37. }
  38. }
以上是標準的工廠設計模式,我的理解:
  • Work 接口:定義了一類產品(比如蜂蜜柚子茶),這些產品都可以幹一種事(doWork():被飲用
    )。
  • Work 實現類:幹這種事的結果各有不同(廠家不同,口味不一),後期可以添加具有這種特點的產品(其他廠家)。
  • IWorkFactory 接口:定義了一類工廠,這些工廠都可以幹一種事(getWork():生產飲料)。
  • IWorkFactory 實現類:不同廠家的工廠不一樣,後期可以在又有廠家開始做蜂蜜柚子茶了之後,添加這些新廠家的工廠。

這樣做的目的和好處(也是多態性的好處):在需要進行產品更新時,主代碼 main 中不需要進行過多的修改,只需要添加或修改產品子類、工廠子類,然後在主代碼中進行相應子類對象的實例化代碼的添加和修改,後面實現的功能以及跟其他部分的關聯都不用做大的更新。

工廠方法(FactoryMethod)