工廠模式(Factory Pattern) 是 Java 中最常用的設計模式之一。 這種類型的設計模式屬于創建型模式, 它提供了一種創建對象的最佳方式。
在工廠模式中, 我們在創建對象時不會對客戶端暴露創建邏輯, 并且是通過使用一個共同的接口來指向新創建的對象。
工廠模式讓調用者與被調用者之間解耦 :當兩者發生變化時, 相互之間的影響降到最低, 這個原則體顯了項目的可維護性 。
優點:面向接口編程, 體現了面向對象的思想; 將創建對象的工作轉移到了工廠類;
JDK 中的工廠設計模式實例 : a.java.util.Calendar, ResourceBundle and NumberFormat getInstance() 使用了工廠方法模式; b.valueOf() 在包裝類中, 如Boolean, Integer 也使用了工廠方法模式; c.Spring框架中, 就是使用了工廠模式來解決對象的創建。
舉例說明:創建不同的產品對象,例如手機、電腦。
a.創建接口,以供不同產品去實現
public interface Product { public void work(); }
b.以供不同對象類去實現接口的方法
public class Computer implements Product { @Override public void work() { System.out.println("電腦開始工作..."); } }
public class Phone implements Product { @Override public void work() { System.out.println("手機開始工作..."); } }
c.定義工廠類來創建對象
public class ProductFactory { public static Product getProduct(String name) { if("phone".equals(name)){ //可將"phone"配置到文件中獲取出來 return new Phone(); }else if ("computer".equals(name)){ //可將"computer"配置到文件中獲取出來 return new Computer(); }else{ throw new ProductException("procuct 不存在!"); //自定義異常ProductException } } }
測試對比:
public class Test { public static void main(String[] args) { //1 Product p = new Phone(); //1 p.work();
//2 工廠模式:讓對象之間的強依賴,轉化成對工廠對象的依賴 Product p = ProductFactory.getProduct("phone"); //可將"phone"配置到文件中獲取出來 p.work(); } }
|