java工廠方法模式


  周末在家也沒事,之前對工廠常用模式了解有一些不夠深入,剛好整理一下設計模式相關。共同理解和學習一下。

 

  1.   工廠方法模式
    1. 工廠方法模式同樣屬於類的創建型模式又被稱
      為多態工廠模式 。工廠方法模式的意義是定義一個創建
      產品對象的工廠接口,將實際創建工作推遲到子類當中。
      核心工廠類不再負責產品的創建,這樣核心類成為一個
      抽象工廠角色,僅負責具體工廠子類必須實現的接口,
      這樣進一步抽象化的好處是使得工廠方法模式可以使系
      統在不修改具體工廠角色的情況下引進新的產品。

  2. 模式中包含的角色及其職責
    1.   解釋

      1.抽象工廠(Creator)角色:工廠方法模式的核心,任何工廠類都必須實現這個接口。(下面代碼的

      FruitFactory接口,任何工廠類都必須實現FruitFactory接口

      2.具體工廠( Concrete Creator)角色:具體工廠類是抽象工廠的一個實現,負責實例化產品對象。(下面代碼中的

      AppleFactory實例,用於具體負責實例化的產品對象。是實現抽象工廠的一個具體實現。

      3.抽象(Product)角色:工廠方法模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。(下面代碼中的

      Fruit接口,負責抽象出所有實例的公共特性。

      4.具體產品(Concrete Product)角色:工廠方法模式所創建的具體實例對象。(下面代碼中的

      Apple類,負責實現抽象接口的具體的實例對象。

  3. 對於的相關代碼如下:
    1.   代碼
      package factorymethod;
      
      public class Apple implements Fruit {
      
          public void get(){
              System.out.println("吃蘋果");
          }
      }
      package factorymethod;
      
      public class AppleFactory implements FruitFactory {
      
          public Fruit getFruit() {
              return new Apple();
          }
      
      }
      package factorymethod;
      
      public class Banana implements Fruit {
      
          public void get(){
              System.out.println("吃香蕉");
          }
      }
      package factorymethod;
      
      public class BananaFactory implements FruitFactory {
      
          public Fruit getFruit() {
              return new Banana();
          }
      
      }
      package factorymethod;
      
      public interface Fruit {
      
          public void get();
      }
      package factorymethod;
      
      public interface FruitFactory {
          public Fruit getFruit();
      }
      package factorymethod;
      
      public class Pear implements Fruit {
          @Override
          public void get() {
              System.out.println("吃梨");
          }
      }
      package factorymethod;
      
      public class PearFactory implements FruitFactory {
      
          public Fruit getFruit() {
              return new Pear();
          }
      }
      package factorymethod;
      
      public class MainClass {
          public static void main(String[] args) {
              //AppleFactory
              FruitFactory ff = new AppleFactory();
      
              Fruit apple = ff.getFruit();
              apple.get();
              
      
              FruitFactory ff2 = new BananaFactory();
              Fruit banana = ff2.getFruit();
              banana.get();
              
      
              FruitFactory ff3 = new PearFactory();
              Fruit pear = ff3.getFruit();
              pear.get();
          }
      }

       

  4. 工廠方法模式和簡單工廠模式比較

      工廠方法模式與簡單工廠模式在結構上的不同不是很明顯。工廠方
    法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具
    體類上。 
      工廠方法模式之所以有一個別名叫多態性工廠模式是因為具體工
    廠類都有共同的接口,或者有共同的抽象父類。
      當系統擴展需要添加新的產品對象時,僅僅需要添加一個具體對
    象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也
    不需要修改客戶端,很好的符合了“開放-封閉”原則。而簡單工廠
    模式在添加新產品對象后不得不修改工廠方法,擴展性不好。
      工廠方法模式退化后可以演變成簡單工廠模式。

  5. 根據上一小節,簡單工廠模式和工廠模式的具體區別在哪里呢。我根據實際情況,畫了一個對比圖型,加深一下大家的印象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM