Java中的工廠設計模式
阿新 • • 發佈:2019-01-01
Java中的工廠設計模式
歡迎到工廠設計模式在Java教程。Factory Pattern是Creational Design模式之一,它在JDK以及Spring和Struts等框架中得到廣泛應用。
目錄[ 隱藏 ]
工廠設計模式
當我們有一個具有多個子類的超類並且基於輸入時,使用工廠設計模式,我們需要返回其中一個子類。此模式負責將類從客戶端程式例項化到工廠類。
讓我們首先學習如何在java中實現工廠設計模式,然後我們將研究工廠模式的優勢。我們將在JDK中看到一些工廠設計模式的使用。請注意,此模式也稱為工廠方法設計模式。
工廠設計模式超類
工廠設計模式中的超類可以是介面,抽象類或普通的java類。對於我們的工廠設計模式示例,我們使用帶有重寫toString()
方法的抽象超類來進行測試。
package com.journaldev.design.model;
public abstract class Computer {
public abstract String getRAM();
public abstract String getHDD();
public abstract String getCPU();
@Override
public String toString(){
return "RAM= "+this.getRAM()+", HDD="+this.getHDD()+", CPU="+this.getCPU();
}
}
工廠設計模式子類
假設我們有兩個子類PC和Server,具有以下實現。
package com.journaldev.design.model;
public class PC extends Computer {
private String ram;
private String hdd;
private String cpu;
public PC(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
請注意,這兩個類都在擴充套件Computer
超類。
package com.journaldev.design.model;
public class Server extends Computer {
private String ram;
private String hdd;
private String cpu;
public Server(String ram, String hdd, String cpu){
this.ram=ram;
this.hdd=hdd;
this.cpu=cpu;
}
@Override
public String getRAM() {
return this.ram;
}
@Override
public String getHDD() {
return this.hdd;
}
@Override
public String getCPU() {
return this.cpu;
}
}
工廠類
現在我們已經準備好了超級類和子類,我們可以編寫工廠類。這是基本的實現。
package com.journaldev.design.factory;
import com.journaldev.design.model.Computer;
import com.journaldev.design.model.PC;
import com.journaldev.design.model.Server;
public class ComputerFactory {
public static Computer getComputer(String type, String ram, String hdd, String cpu){
if("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
else if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
return null;
}
}
關於工廠設計模式方法的一些要點是;
- 我們可以保留Factory類Singleton,或者我們可以保留將子類作為static返回的方法。
- 請注意,基於輸入引數,將建立並返回不同的子類。
getComputer
是工廠方法。
這是一個簡單的測試客戶端程式,它使用上面的工廠設計模式實現。
package com.journaldev.design.test;
import com.journaldev.design.factory.ComputerFactory;
import com.journaldev.design.model.Computer;
public class TestFactory {
public static void main(String[] args) {
Computer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
Computer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
System.out.println("Factory PC Config::"+pc);
System.out.println("Factory Server Config::"+server);
}
}
上述計劃的輸出是:
Factory PC Config::RAM= 2 GB, HDD=500 GB, CPU=2.4 GHz
Factory Server Config::RAM= 16 GB, HDD=1 TB, CPU=2.9 GHz
工廠設計模式的優點
- 工廠設計模式提供了介面而不是實現的程式碼方法。
- 工廠模式從客戶端程式碼中刪除實際實現類的例項化。工廠模式使我們的程式碼更健壯,耦合更少,易於擴充套件。例如,我們可以輕鬆更改PC類實現,因為客戶端程式不知道這一點。
- 工廠模式通過繼承提供實現和客戶端類之間的抽象。
JDK中的工廠設計模式示例
- java.util.Calendar,ResourceBundle和NumberFormat
getInstance()
方法使用Factory模式。 valueOf()
包裝類中的方法,如Boolean,Integer等。
工廠設計模式YouTube視訊教程
我最近在YouTube上釋出了一個關於工廠設計模式的視訊,請檢視。請喜歡並分享視訊並訂閱我的YouTube頻道。
轉載來源:https://www.journaldev.com/1392/factory-design-pattern-in-java