鍍金池/ 教程/ Java/ 工廠三兄弟之簡(jiǎn)單工廠模式(三)
工廠三兄弟之抽象工廠模式(五)
復(fù)雜對(duì)象的組裝與創(chuàng)建——建造者模式(一)
工廠三兄弟之工廠方法模式(一)
復(fù)雜對(duì)象的組裝與創(chuàng)建——建造者模式(二)
確保對(duì)象的唯一性——單例模式 (二)
工廠三兄弟之簡(jiǎn)單工廠模式(四)
確保對(duì)象的唯一性——單例模式 (一)
工廠三兄弟之工廠方法模式(四)
對(duì)象的克隆——原型模式(一)
工廠三兄弟之抽象工廠模式(二)
工廠三兄弟之工廠方法模式(三)
工廠三兄弟之抽象工廠模式(一)
工廠三兄弟之抽象工廠模式(四)
確保對(duì)象的唯一性——單例模式 (三)
工廠三兄弟之簡(jiǎn)單工廠模式(三)
對(duì)象的克隆——原型模式(二)
復(fù)雜對(duì)象的組裝與創(chuàng)建——建造者模式(三)
對(duì)象的克隆——原型模式(四)
確保對(duì)象的唯一性——單例模式(四)
工廠三兄弟之簡(jiǎn)單工廠模式(一)
工廠三兄弟之簡(jiǎn)單工廠模式(二)
對(duì)象的克隆——原型模式(三)
工廠三兄弟之抽象工廠模式(三)
確保對(duì)象的唯一性——單例模式(五)
工廠三兄弟之工廠方法模式(二)

工廠三兄弟之簡(jiǎn)單工廠模式(三)

完整解決方案

為了將 Chart 類的職責(zé)分離,同時(shí)將 Chart 對(duì)象的創(chuàng)建和使用分離,Sunny 軟件公司開發(fā)人員決定使用簡(jiǎn)單工廠模式對(duì)圖表庫進(jìn)行重構(gòu),重構(gòu)后的結(jié)構(gòu)如圖所示:

http://wiki.jikexueyuan.com/project/design-pattern-creation/images/20130711144554265.jpg" alt="圖表庫結(jié)構(gòu)圖" />

在圖中,Chart 接口充當(dāng)抽象產(chǎn)品類,其子類HistogramChart、PieChart 和 LineChart 充當(dāng)具體產(chǎn)品類,ChartFactory 充當(dāng)工廠類。完整代碼如下所示:

//抽象圖表接口:抽象產(chǎn)品類
interface Chart {
    public void display();
}

//柱狀圖類:具體產(chǎn)品類
class HistogramChart implements Chart {
    public HistogramChart() {
        System.out.println("創(chuàng)建柱狀圖!");
    }

    public void display() {
        System.out.println("顯示柱狀圖!");
    }
}

//餅狀圖類:具體產(chǎn)品類
class PieChart implements Chart {
    public PieChart() {
        System.out.println("創(chuàng)建餅狀圖!");
    }

    public void display() {
        System.out.println("顯示餅狀圖!");
    }
}

//折線圖類:具體產(chǎn)品類
class LineChart implements Chart {
    public LineChart() {
        System.out.println("創(chuàng)建折線圖!");
    }

    public void display() {
        System.out.println("顯示折線圖!");
    }
}

//圖表工廠類:工廠類
class ChartFactory {
    //靜態(tài)工廠方法
    public static Chart getChart(String type) {
        Chart chart = null;
        if (type.equalsIgnoreCase("histogram")) {
            chart = new HistogramChart();
            System.out.println("初始化設(shè)置柱狀圖!");
        }
        else if (type.equalsIgnoreCase("pie")) {
            chart = new PieChart();
            System.out.println("初始化設(shè)置餅狀圖!");
        }
        else if (type.equalsIgnoreCase("line")) {
            chart = new LineChart();
            System.out.println("初始化設(shè)置折線圖!");            
        }
        return chart;
    }
}

編寫如下客戶端測(cè)試代碼:

class Client {
    public static void main(String args[]) {
        Chart chart;
        chart = ChartFactory.getChart("histogram"); //通過靜態(tài)工廠方法創(chuàng)建產(chǎn)品
        chart.display();
    }
}

編譯并運(yùn)行程序,輸出結(jié)果如下:

創(chuàng)建柱狀圖!
初始化設(shè)置柱狀圖!
顯示柱狀圖!

在客戶端測(cè)試類中,我們使用工廠類的靜態(tài)工廠方法創(chuàng)建產(chǎn)品對(duì)象,如果需要更換產(chǎn)品,只需修改靜態(tài)工廠方法中的參數(shù)即可,例如將柱狀圖改為餅狀圖,只需將代碼:

chart = ChartFactory.getChart("histogram");

改為:

chart = ChartFactory.getChart("pie");

編譯并運(yùn)行程序,輸出結(jié)果如下:

創(chuàng)建餅狀圖!
初始化設(shè)置餅狀圖!
顯示餅狀圖!