1、什麼是工廠模式
它提供了一種創建對象的最佳方式。在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。實現了創建者和調用者分離,工廠模式 分為簡單工廠、工廠方法、抽象工廠模式。
2、工廠模式的好處
(1)工廠模式是我們最常用的實例化對象模式了,是用工廠方法代替new操作的一種模式。
(2)利用工廠模式可以降低程序的耦合性,為後期的維護修改提供了很大的便利。
(3)将選擇實現類、創建對象統一管理和控制。從而将調用者跟我們的實現類解耦。
3、工廠模式應用場景
(1)如果有多個類,而且這些類還需要針對不同的情況來創建不同的對象,這時候就需要工廠了,我們可以在工廠中根據條件來創建具體的對象。
(2)動态地根據不同的類型創建不同的對象,考慮使用工廠模式,将這一大坨 if-else創建對象的代碼抽離出來,放到工廠類中。
4、工廠模式分類
工廠模式分為簡單工廠、工廠方法、抽象工廠模式。
簡單工廠 :用來生産同一等級結構中的任意産品,相當于是一個工廠中有各種産品,創建在一個類中,客戶無需知道具體産品的名稱, 隻需要知道産品類所對應的參數即可。但是工廠的職責過重,而且當類型過多時不利于系統的擴展維護。
工廠方法 :用來生産同一等級結構中的固定産品,在工廠方法模式中,核心的工廠類不再負責所有的産品的創建,而是将具體創建的工作交給子類去做。該核心類成為一個抽象工廠角色,僅負責給出具體工廠子類必須實現的接口,而不接觸哪一個産品類應當被實例化這種細節。
抽象工廠 :用來生産不同産品族的全部産品,簡單地說是工廠的工廠,抽象工廠可以創建具體工廠,由具體工廠來産生具體産品。
5、代碼實現
簡單工廠模式
public interface Car {
public void run();
}
public class Bmw implements Car {
public void start() {
System.out.println("寶馬汽車啟動...");
}
}
public class AoDi implements Car {
public void start() {
System.out.println("奧迪汽車啟動..");
}
}
public class CarFactory {
public static Car createCar(String name) {
if(name.equals("奧迪")){
return new AoDi();
}
if(name.equals("寶馬")){
return new Bmw();
}
return null;
}
}
public class Client {
public static void main(String[] args) {
Car aodi =CarFactory.createCar("奧迪");
Car bmw =CarFactory.createCar("寶馬");
aodi.start();
bmw.start();
}
}
工廠方法模式:
public interface Car {
public void start();
}
public interface CarFactory {
Car createCar();
}
public class AoDi implements Car {
public void start() {
System.out.println("奧迪汽車..");
}
}
public class Bmw implements Car {
public void start() {
System.out.println("寶馬汽車...");
}
}
public class AoDiFactory implements CarFactory {
public Car createCar() {
return new AoDi();
}
}
public class BmwFactory implements CarFactory {
public Car createCar() {
return new Bmw();
}
}
public class Client {
public static void main(String[] args) {
Car aodi = new AoDiFactory().createCar();
Car bmw = new BmwFactory().createCar();
aodi.start();
bmw.start();
}
}
抽象工廠
// 汽車 工廠及實現類
public interface Car {
void run();
}
class CarA implements Car{
public void run() {
System.out.println("寶馬");
}
}
class CarB implements Car{
public void run() {
System.out.println("電動車");
}
}
// 發動機 工廠及實現類
public interface Engine {
void run();
}
class EngineA implements Engine {
public void run() {
System.out.println("跑的快!");
}
}
class EngineB implements Engine {
public void run() {
System.out.println("跑的慢!");
}
}
// 總工廠,及實現類
public interface TotalFactory {
// 創建汽車
Car createChair();
// 創建發動機
Engine createEngine();
}
//由他決定調用哪個工廠的那個實例
class TotalFactoryImpl implements TotalFactory {
public Engine createEngine() {
return new EngineA();
}
public Car createChair() {
return new CarA();
}
}
public class Test {
public static void main(String[] args) {
TotalFactory totalFactory = new TotalFactoryImpl();
Car car = totalFactory.createChair();
car.run();
TotalFactory totalFactory2 = new TotalFactoryImpl();
Engine engine = totalFactory2.createEngine();
engine.run();
}
}
您的點贊就是對我最大的鼓勵。[玫瑰][玫瑰][玫瑰]
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!