工廠模式有三種:
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();
優缺點同工廠方法模式