工廠方法(FactoryMethod)設計模式

接口 interface 是一種特殊的抽象類,可以實現多重繼承,即一個類可以實現多個接口。
工廠方法的設計模式充分利用接口,將設計生產者與使用者(消費者)隔離。

FactoryMethod 模式是設計模式中應用最爲廣泛的模式,在面向對象的編程中,對象的創建工作非常簡單,對象的創建時機卻很重要。FactoryMethod 解決的就是這個問題,它通過面向對象的手法,將所要創建的具體對象的創建過程延遲到了子類,從而提供了一種擴展的策略,較好的解決了這種緊耦合的關係。
在這裏插入圖片描述
上圖中左邊爲傳統的方法,如果開發人員想修改類的名稱或其他信息,會直接影響 B 的代碼也要做相應的修改,這樣是不合理的。
通過右邊的方法可以解決這個問題。A 首先創建一個汽車的接口 BWM ,來實現各個系列車的構建。下面一步是關鍵,再創建一個工廠接口,分別構建各個汽車生產工廠的類,返回的是各個汽車的類。
所以 B 只需要調用這個工廠接口就行了。這時候 A 不管怎麼修改汽車類,都不會影響 B 的代碼。

具體見代碼:

下面是開發人員 A 的代碼,寶馬汽車的構建:

/**
 * 寶馬汽車的接口
 */
public interface BMW {
    void showInfo();
}

/**
 * 寶馬3系類
 */
class BMW3 implements BMW {
    @Override
    public void showInfo() {
        System.out.println("寶馬3系車");
    }
}

/**
 * 寶馬5系類
 */
class BMW5 implements BMW {
    @Override
    public void showInfo() {
        System.out.println("寶馬5系車");
    }
}

/**
 * 寶馬7系類
 */
class BMW7 implements BMW {
    @Override
    public void showInfo() {
        System.out.println("寶馬7系車");
    }
}

下面是開發人員 A 的代碼,寶馬汽車工廠類的構建:

/**
 * 寶馬汽車工廠的接口
 */
public interface BMWFactory {
    BMW productCar();
}

class BMW3Factory implements BMWFactory {

    @Override
    public BMW productCar() {
        System.out.println("這是BMW3的生成工廠");
        return new BMW3();
    }
}

class BMW5Factory implements BMWFactory {

    @Override
    public BMW productCar() {
        System.out.println("這是BMW5的生成工廠");
        return new BMW5();
    }
}

class BMW7Factory implements BMWFactory {

    @Override
    public BMW productCar() {
        System.out.println("這是BMW7的生成工廠");
        return new BMW7();
    }
}

下面是開發人員 B 的代碼,通過工廠接口獲取汽車的信息:


public static void main(String[] args) {
	//無論開發人員 A 怎麼修改汽車的類,只需要他同步修改工廠類即可,不會影響 B 這裏的使用
    BMW car3 = new BMW3Factory().productCar();
    car3.showInfo();
    BMW car5 = new BMW5Factory().productCar();
    car5.showInfo();
    BMW car7 = new BMW7Factory().productCar();
    car7.showInfo();
}

返回結果:

這是BMW3的生成工廠
寶馬3系車
這是BMW5的生成工廠
寶馬5系車
這是BMW7的生成工廠
寶馬7系車

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章