軟件設計模式學習(四)簡單工廠模式

簡單工廠模式

簡單工廠模式是最簡單的設計模式之一,雖然不屬於二十三種設計模式,但應用也較爲頻繁。學習它也是學習其餘建立型模式的基礎java



模式定義

在實際軟件開發中,有時需建立一些來自於相同父類的類的實例,爲此能夠專門定義一個類來負責建立這些類的實例,這些被建立的實例具備共同的父類。習慣上將得到其餘類實例的方法定義爲static方法,外部不須要實例化這個類就能夠直接調用該方法得到對象,該方法也稱爲靜態工廠方法。設計模式

簡單工廠模式又稱爲靜態工廠方法模式,根據參數的不一樣返回不一樣的類型的實例。簡單工廠模式專門定義一個類來負責建立其餘類的實例,被建立的實例一般具備共同的父類。ide


簡單工廠模式實例之手機工廠

  1. 實例說明

    某手機廠專爲各手機品牌生產手機,調用工廠的方法時傳入參數,則根據傳入的不一樣參數返回不一樣品牌的手機。工具

  2. 實例類圖

    在這裏插入圖片描述

  3. 實例代碼及解釋

    1. 抽象產品類Phone學習

      public abstract class Phone {
      
          public abstract void use();
      }
    2. 具體產品類HuaweiPhone測試

      public class HuaweiPhone extends Phone {
          @Override
          public void use() {
              System.out.println("華爲手機使用中....");
          }
      }
    3. 具體產品類XiaomiPhoneui

      public class XiaomiPhone extends Phone {
      
          @Override
          public void use() {
              System.out.println("小米手機使用中....");
          }
      }
    4. 工廠類PhoneFactory設計

      public class PhoneFactory {
      
          public static Phone producePhone(String brand) {
      
              if(brand.equalsIgnoreCase("huawei")) {
                  System.out.println("生產華爲手機...");
                  return new HuaweiPhone();
              } else if (brand.equalsIgnoreCase("xiaomi")) {
                  System.out.println("生產小米手機");
                  return new XiaomiPhone();
              } else {
                  System.out.println("暫無該手機生產....");
                  return null;
              }
          }
      }
    5. 配置文件code

      <?xml version="1.0" encoding="UTF-8" ?>
      <configuration>
          <!--
              經過從XML配置文件讀取節點獲取數據
           -->
          <brandName>huawei</brandName>
      </configuration>
    6. XML操做工具類xml

      public class XMLUtilPhone {
      
          public static String getBrandName() throws Exception {
      
              //建立解析器工廠
              DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
              //建立解析器
              DocumentBuilder builder = builderFactory.newDocumentBuilder();
              //獲得document
              Document document = builder.parse("configPhone.xml");
              //獲取包含品牌名稱的文本節點
              NodeList brandNameList = document.getElementsByTagName("brandName");
              Node classNode = brandNameList.item(0).getFirstChild();
              String brandName = classNode.getNodeValue().trim();
      
              return brandName;
          }
      }
    7. 測試類

      public class Test {
      
          public static void main(String[] args) throws Exception {
              String brandName = XMLUtilPhone.getBrandName();
              Phone phone = PhoneFactory.producePhone(brandName);
              phone.use();
          }
      }
    8. 結果分析

      若是在配置文件中將節點內容設置爲huawei,則輸出結果爲:
      在這裏插入圖片描述
      若是設置爲vivo,則輸出結果爲:
      在這裏插入圖片描述

      若是但願系統支持生產vivo牌手機,則須要添加一個新的具體類VivoPhone,同時還須要修改工廠中的方法。所以簡單工廠模式最大的問題在於工廠類的職責過於沉重,而且修改工廠類邏輯判斷這一點是與開閉原則相違背的。

相關文章
相關標籤/搜索