天天看點

設計模式記錄-工廠方法模式

定義:定義一個用于建立對象的接口,讓子類決定執行個體化哪個類,工廠方法使一個類的執行個體化延遲到子類。

其通用格式為:

産品的接口

public interface Product {
    
    void method();
}
           

具體産品

public class ConcreteProduct2 implements Product {
    public void method() {
        //具體處理
        System.out.println("this is ConcreteProduct2");
    }
}


public class ConcreteProduct1 implements Product {
    public void method() {
        //具體處理
        System.out.println("this is ConcreteProduct1");
    }
}
           

抽象工廠類

public abstract class Creator {
    //建立Product
    public abstract <T extends Product> T createProduct(Class<T> c);
}
           

具體工廠類

public class ConcreteCreator extends Creator {

    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try {
            product = (Product) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            //異常處理
        }
        return (T) product;
    }
}
           

場景類

public class Client {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        ConcreteProduct1 product = creator.createProduct(ConcreteProduct1.class);
        // 具體業務處理
        product.method();
    }
}
           

優點

  1. 良好的封裝性,代碼結構清晰。建立産品隻需要知道産品的類名即可,不用知道建立過程,降低子產品間的耦合度。
  2. 易于擴充。增加産品時隻需要建立産品實作接口即可。
  3. 屏蔽産品。産品類實作如何變化調用者不需要關心,隻需要關心産品的接口,隻要産品接口不變化,系統中的上層子產品就不需要變化。

繼續閱讀