工廠模式

工廠模式有三種:

1、簡單工廠模式(Simple Factory Pattern)

簡單工廠模式又稱之爲靜態工廠方法,屬於創建型模式。是通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。eg:

抽象類:

public interface Car {
    void drive();
}

具體實現:

public class Benz implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Benz ");
    }
}

public class Bmw implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Bmw ");
    }
}

工廠類:

public class Driver {
    public static Car driverCar(String s) {
        if (s.equalsIgnoreCase("Benz")) {
            return new Benz();
        } else if (s.equalsIgnoreCase("Bmw")) {
            return new Bmw();
        }
        return null;
    }
}

調用:

Car car = Driver.driverCar("Benz");
car.drive();

優點:簡單工廠模式將對象的創建和對象本身業務處理分離,降低耦合度。

缺點:增加了系統中類的個數,在一定程度上增加了系統的複雜度和理解難度。並且他不符合開閉原則(對擴展開放、對修改關閉),每增加一個類,都要在工廠類中增加相應的判斷邏輯。


2、工廠方法模式(Factory Method Pattern)

工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法模式讓實例化推遲到子類。
eg:

抽象類:

public interface Car {
    void drive();
}

具體實現:

public class Benz implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Benz ");
    }
}

public class Bmw implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Bmw ");
    }
}

抽象工廠:

public interface Driver {
    Car driverCar();
}

具體工廠:

public class BenzDriver implements Driver {
    @Override
    public Car driverCar() {
        return new Benz();
    }
}
public class BmwDriver implements Driver {
    @Override
    public Car driverCar() {
        return new Bmw();
    }
}

調用:

Driver driver = new BenzDriver();
Car car = driver.driverCar();
car.drive();

優點: 在工廠方法模式中,用戶只需要知道創建對象的具體工廠,不用知道對象具體的創建過程。在增加新的類時,只需增加一個具體類和對應的實現工廠,符合“開閉原則”。

缺點:類會越來越多,增加了系統的複雜度。


3、抽象工廠模式(Abstract Factory Parrern)

在工廠方法模式中一個具體的工廠對應一個具體的對象。但是有時候我們需要一個工廠能夠提供多個相關或相互依賴對象,而不是單一的對象,這個時候我們就需要使用抽象工廠模式。

eg: 接着上面的工廠模式寫

抽象工廠:

public interface Driver {
    Car driverCar();
    Bike driverBike();
}

具體工廠:

public class MMDriver implements Driver {
    @Override
    public Car driverCar() {
        return new Benz();
    }

    @Override
    public Bike driverBike() {
        return new HelloBike();
    }
}

調用:

Driver driver = new MMDriver();
driver.driverCar();
driver.driverBike();

優缺點同工廠方法模式

發佈了51 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章