設計模式之工廠模式

設計模式之工廠模式

1:定義描述:

1.1 定義描述:在內部隱藏複雜的邏輯,只關心結果而不關心過程的設計模式。舉個例子,生產者與消費者,消費者買麪包(產品),關心的是生產者生產的麪包的質量與口感。而不關心麪包是如何生成的(過程)。

1.2:在此文章中,我舉生產者買車,消費者造車的例子來體現工廠模式

1.3 創建3個車類,Audi、Benz、Bmw和一個產品Car接口類(汽車應有一個統一標準)。3個車類都實現Car。代碼如下:

public interface Car {

    //規定汽車的品牌
    String getName();
}
public class Audi implements Car{
    @Override
    public String getName() {
        return "Audi";
    }
}
public class Benz  implements Car{
    @Override
    public String getName() {
        return "Benz";
    }
}
public class Bmw implements Car{
    @Override
    public String getName() {
        return "Bmw";
    }
}

2:簡單工廠模式

2.1:創建工廠角色 代碼如下

簡單工廠類:
//簡單工廠類
public class SimpleFactory {

    public Car getName(String carName){
        if("Audi".equals(carName)){
            return new Audi();
        }
        else if("Benz".equals(carName)){
            return new Benz();
        }
        else if("Bmw".equals(carName)){
            return new Bmw();
        }else{
            System.out.println("無法製造出此類汽車類型");
            return null;
        }

    }
}
測試類:
public class SimpleFactoryTest {

    public static void main(String[] args) {
        Car car = new SimpleFactory().getName("Audi");
        System.out.println(car.getName());
    }

}

2.2 從代碼就可以看出來簡單工廠的本質就是一個工廠可以做不同種類的車,是一個萬能工廠。對用戶來說很友好,直接去這家萬能工廠去買想要的車即可,對於用戶來說體驗很好,但對於工廠來說管理起來很大方便,多了減輕簡單工廠模式的壓力,即產生了工廠模式

3:工廠模式

3.1:工廠模式就是將簡單工廠分家,分爲3個工廠類,各自制造自己的汽車,代碼如下

統一企業標準類代碼:
//工廠接口 ,定義所有工廠的執行標準
public interface Factory {

    //符合汽車上路標準
    Car getCar();
}
三家企業工廠類代碼:
public class AudiFactory implements Factory{

    @Override
    public Car getCar() {
        return new Audi();
    }
}
public class BenzFactory implements Factory{

    @Override
    public Car getCar() {
        return new Benz();
    }
}
public class BmwFactory implements Factory{

    @Override
    public Car getCar() {
        return new Bmw();
    }
}
測試類代碼:
public class FactoryTest {

    public static void main(String[] args) {
        Factory factory = new AudiFactory();
        System.out.println(factory.getCar());

        Factory factory2 = new BenzFactory();
        System.out.println(factory.getCar());

        Factory factory3 = new BmwFactory();
        System.out.println(factory.getCar());
    }

}

3.2:工廠模式總結:簡單工廠分家之後管理變得簡單了許多,出問題的話,更方便定位到哪一家。但工廠模式出現了新的問題,現在工廠管理簡單了,但是用戶買車麻煩了,需要要找指定的工廠才能買到車。爲了優化這個問題,抽象工廠產生了,抽象工廠模式吸收了簡單工廠模式和工廠模式的優。

4:抽象工廠模式 代碼如下

三個工廠和上面一樣:多了整合三家工廠的抽象類
public abstract class AbstractFacrory {

	//當用戶不指定汽車類型時默認製造的汽車	
    protected abstract Car getCar();

    protected Car getCar(String carName){
        if("Audi".equals(carName)){
            return new Audi();
        }
        else if("Benz".equals(carName)){
            return new Benz();
        }
        else if("Bmw".equals(carName)){
            return new Bmw();
        }else{
            System.out.println("無法製造出此類汽車類型");
            return null;
        }
    }
}
實現抽象類(spring裏面也有類似的default的工廠類)
//默認製造的汽車類型(默認Audi)
public class DefaultFactory extends AbstractFacrory{

    private AudiFactory defaultFactory = new AudiFactory();

    @Override
    protected Car getCar() {
        return defaultFactory.getCar();
    }
}
測試類
public class AbstactFactoryTest {

    public static void main(String[] args) {
        DefaultFactory defaultFactory = new DefaultFactory();
        System.out.println(defaultFactory.getCar());
        System.out.println(defaultFactory.getCar("Bmw"));
    }
}

4.1:抽象工廠方法 就像是寫代碼的人和用代碼人之間比較和諧的一種變現形式。

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