工廠方法模式

一 介紹

工廠方法模式是5種創(chuàng)建性模型之一,屬于23種GOF設(shè)計(jì)模式之一,也是Java種最常用的設(shè)計(jì)模式之一,解決的是軟件設(shè)計(jì)中創(chuàng)建對象的問題。

二 定義

定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個(gè)類,工廠方法模式讓一個(gè)類的實(shí)例化延遲到了其子類。

模擬場景

現(xiàn)在模擬一個(gè)汽車的生產(chǎn)工廠,有兩個(gè)汽車生產(chǎn)工廠,分別生產(chǎn)Audi和Benz汽車,下面根據(jù)上面的UML圖實(shí)現(xiàn)兩種汽車的生產(chǎn)過程。


1 定義產(chǎn)品(汽車)的接口

public abstract class Product {

    /**
     * 產(chǎn)品類的抽象方法
     * 由具體的產(chǎn)品類去實(shí)現(xiàn)
     */
    public abstract void drive();
}

2 下面定義兩種品牌的汽車類的具體實(shí)現(xiàn)。

public class AudiProduct extends Product{
    @Override
    public void drive() {
        System.out.println("Audi車行駛中...");
    }
public class BenzProduct extends Product{
    @Override
    public void drive() {
        System.out.println("Benz車行駛中...");
    }
}

3 定義抽象工廠.

抽象工廠返回產(chǎn)品,具體返回什么產(chǎn)品要由具體的工廠實(shí)現(xiàn)決定。

public abstract class Factory {

    /**
     * 抽象工廠方法
     * 具體生產(chǎn)什么由子類去實(shí)現(xiàn)
     * @return
     */
    public abstract Product creatProduct();
}

4 定義具體的工廠實(shí)現(xiàn)。

在具體的工廠實(shí)現(xiàn)里返回具體的產(chǎn)品。

public class AudiFactory extends Factory{
    @Override
    public Product creatProduct() {
        return new AudiProduct();
    }
}
public class BenzFactory extends Factory {
    @Override
    public Product creatProduct() {
        return new BenzProduct();
    }
}

5 客戶端實(shí)現(xiàn)

 // Audi
        Factory audiFactory = new AudiFactory();  // 工廠
        Product audiProduct=audiFactory.creatProduct();  // 產(chǎn)品
        audiProduct.drive();
        // Benz
        Factory benzFactory = new BenzFactory(); // 工廠
        Product benzProduct=benzFactory.creatProduct(); // 產(chǎn)品
        benzProduct.drive();

可以看到,和簡單工廠模式相比,簡單工廠產(chǎn)品類的實(shí)例化在一個(gè)統(tǒng)一工廠里實(shí)現(xiàn),統(tǒng)一工廠根據(jù)參數(shù)的不同實(shí)例化不同的產(chǎn)品類。而在工廠方法里,產(chǎn)品類的實(shí)例化推遲到了客戶端實(shí)現(xiàn)。
工廠方法模式總結(jié)如下:
優(yōu)點(diǎn):
1.更符合開閉原則,既擴(kuò)展開放,對修改關(guān)閉,對程序進(jìn)行擴(kuò)展時(shí),只需新增一項(xiàng)產(chǎn)品類,并實(shí)現(xiàn)對一個(gè)的工廠方法。(簡單工廠需要去修改工廠類,增加邏輯判斷)
2.符合單一職責(zé)原則
每一個(gè)產(chǎn)品工廠類只負(fù)責(zé)生產(chǎn)對象的產(chǎn)品。(簡單工廠模式只有一個(gè)生產(chǎn)產(chǎn)品的工廠)
缺點(diǎn):
1.每新增一個(gè)產(chǎn)品,都要增加一個(gè)產(chǎn)品類和對應(yīng)的生產(chǎn)工廠,會造成類的數(shù)目增加。
2.每一個(gè)工廠只負(fù)責(zé)生產(chǎn)對應(yīng)的產(chǎn)品,比較單一。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容