首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

設計模式詳解:工廠方法模式三種變體

     編輯:Java 綜合教學

適用場景

大量產品需要頻繁創建,且共享同一接口時,使用工廠方法模式封裝實例化邏輯,解耦調用方與具體實現類。

統一接口定義

public interface Job {
    void say();
}

實現類

public class ReadJob implements Job {
    @Override public void say() { System.out.println("This is read Job"); }
}
public class WriteJob implements Job {
    @Override public void say() { System.out.println("This is write Job"); }
}

三種工廠變體

1. 普通工廠(參數化)

public class SimpleJobFactory {
    public static final String READ = "read";
    public static final String WRITE = "write";

    public Job produce(String type) {
        if (READ.equalsIgnoreCase(type)) return new ReadJob();
        else if (WRITE.equalsIgnoreCase(type)) return new WriteJob();
        else { System.out.println("Parameter error"); return null; }
    }
}

缺點: 字符串參數易拼寫錯誤,運行時才發現,違反開閉原則(新增產品需修改工廠)。

2. 多方法工廠

public class MethodsJobFactory {
    public Job produceReadJob() { return new ReadJob(); }
    public Job produceWriteJob() { return new WriteJob(); }
}

優點: 編譯期檢查方法名,避免字符串錯誤。缺點: 需實例化工廠對象,新增產品仍需修改工廠類。

3. 靜態工廠方法(推薦)

public class MethodsJobStaticFactory {
    public static Job produceReadJob() { return new ReadJob(); }
    public static Job produceWriteJob() { return new WriteJob(); }
}

優點: 無需實例化,直接類名調用,代碼簡潔。缺點: 同樣違反開閉原則,靜態方法難以覆寫/擴展。

測試代碼

public class Test {
    public static void main(String[] args) {
        // 靜態工廠調用
        Job j1 = MethodsJobStaticFactory.produceReadJob();
        Job j2 = MethodsJobStaticFactory.produceWriteJob();
        j1.say(); j2.say();
    }
}

進階:抽象工廠模式預告

下一篇將介紹抽象工廠模式,解決「產品族」創建問題,真正實現開閉原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved