設計模式-工廠模式


設計模式-工廠模式


Factory Design Pattern

當我們有一個具有多個子類的超類時,我們使用工廠設計模式,並且根據輸入類型,我們需要返回其中一個子類。此模式就是將類實例化的職責從客戶端程序轉移到工廠類。

讓我們首先學習如何在java中實現工廠設計模式,然後再研究工廠模式的優點。我們將在JDK中看到一些工廠設計模式的使用。請注意,此模式也稱為工廠方法設計模式。

Factory Design Pattern Super Class

工廠設計模式中的超類可以是接口、抽象類或普通java類。對於我們的工廠設計模式示例,我們有一個帶有覆蓋的toString()方法的抽象超類,用於測試。

<code>public abstract class Computer {
\tpublic abstract String getRAM();

\tpublic abstract String getHDD();

\tpublic abstract String getCPU();

\t@Override
\tpublic String toString() {
\t\treturn "RAM= " + this.getRAM() + ", HDD=" + this.getHDD() + ", CPU=" + this.getCPU();
\t}
}/<code>

Factory Design Pattern Sub Classes

假設我們有兩個子類PC和server。

<code>public class PC extends Computer {

\tprivate String ram;
\tprivate String hdd;
\tprivate String cpu;
\t
\tpublic PC(String ram, String hdd, String cpu){
\t\tthis.ram=ram;
\t\tthis.hdd=hdd;
\t\tthis.cpu=cpu;
\t}
\t@Override
\tpublic String getRAM() {
\t\treturn this.ram;
\t}

\t@Override
\tpublic String getHDD() {
\t\treturn this.hdd;
\t}

\t@Override
\tpublic String getCPU() {
\t\treturn this.cpu;
\t}

}

public class Server extends Computer {

\tprivate String ram;
\tprivate String hdd;
\tprivate String cpu;
\t
\tpublic Server(String ram, String hdd, String cpu){
\t\tthis.ram=ram;
\t\tthis.hdd=hdd;
\t\tthis.cpu=cpu;
\t}
\t@Override
\tpublic String getRAM() {
\t\treturn this.ram;
\t}

\t@Override
\tpublic String getHDD() {
\t\treturn this.hdd;

\t}

\t@Override
\tpublic String getCPU() {
\t\treturn this.cpu;
\t}

}/<code>

注意,這兩個類都擴展了Computer超類。

Factory Class

現在我們已經準備好了超類和子類,我們可以編寫工廠類了。下面是基本的實現。

<code>public class ComputerFactory {

\tpublic static Computer getComputer(String type, String ram, String hdd, String cpu){
\t\tif("PC".equalsIgnoreCase(type)) return new PC(ram, hdd, cpu);
\t\telse if("Server".equalsIgnoreCase(type)) return new Server(ram, hdd, cpu);
\t\t
\t\treturn null;
\t}
}/<code>

工廠設計模式方法的一些要點:

1、工廠類可以是單例的,返回子類的方法可以是靜態的。

2、根據輸入的參數返回不同的子類對象。

下面我們寫一些測試代碼。

<code>public class TestFactory { 


\tpublic static void main(String[] args) {
\t\tComputer pc = ComputerFactory.getComputer("pc","2 GB","500 GB","2.4 GHz");
\t\tComputer server = ComputerFactory.getComputer("server","16 GB","1 TB","2.9 GHz");
\t\tSystem.out.println("Factory PC Config::"+pc);
\t\tSystem.out.println("Factory Server Config::"+server);
\t}

}/<code>

調試輸出內容如下。

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

工廠模式的優點:

1、工廠設計模式提供了接口代碼而不是實現代碼的方法。

2、工廠模式從客戶端代碼中移除實際實現類的實例化。工廠模式使我們的代碼更健壯、耦合更少且易於擴展。例如,我們可以很容易地改變PC類的實現,因為客戶端程序不知道這一點。

3、工廠模式通過繼承在實例實現和客戶類之間提供抽象。

工廠模式在jdk中的應用

1、java.util.Calendar、ResourceBundle和NumberFormat的getInstance()方法使用工廠模式。

2、valueOf()方法在包裝類,如布爾,整數類型等。


分享到:


相關文章: