23種設計模式——工廠模式
阿新 • • 發佈:2020-07-13
23種設計模式——工廠模式
作用
實現了建立者和呼叫者分離
詳細分類
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
核心本質
-
例項化物件不使用new,用工廠方法代替
-
將選擇實現類,建立物件統一管理和控制。從而將呼叫者跟我們的實現類解耦
1)簡單工廠(靜態工廠模式)
雖然某種程度上不符合設計原則,但實際用的最多
package com.mjh.factory.simple;
public interface Car {
void name();
}
package com.mjh.factory.simple; public class AoDi implements Car { @Override public void name() { System.out.println("奧迪"); } }
package com.mjh.factory.simple;
public class TesLa implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.mjh.factory.simple; //靜態工廠模式 //增加一個新產品,如果你不修改程式碼,做不到的 //開閉原則 public class CarFactory { public static Car getCar(String car){ //方法一 if(car.equals("奧迪")){ return new AoDi(); }else if(car.equals("特斯拉")){ return new TesLa(); }else { return null; } } //方法二 public static Car getAoDi(){ return new AoDi(); } public static Car getTesLa(){ return new TesLa(); } }
package com.mjh.factory.simple; public class Impl { public static void main(String[] args) { /* Car car = new AoDi(); Car car1 = new TesLa(); 不用new建立了,只需建立一個工廠*/ //使用工廠建立 Car car = CarFactory.getCar("奧迪"); Car car1= CarFactory.getCar("特斯拉"); car.name(); car1.name(); } }
2)工廠方法模式
不修改已有的類的前提下,通過增加新的工廠實現擴充套件
package com.mjh.factory.method;
public interface Car {
void name();
}
package com.mjh.factory.method;
public interface CarFactory {
Car getCar();
}
package com.mjh.factory.method;
public class AoDi implements Car {
@Override
public void name() {
System.out.println("奧迪");
}
}
package com.mjh.factory.method;
public class AoDiFactory implements CarFactory {
@Override
public Car getCar() {
return new AoDi();
}
}
package com.mjh.factory.method;
public class Impl {
public static void main(String[] args) {
Car car = new AoDiFactory().getCar();
Car car1 = new TesLaFactory().getCar();
car.name();
car1.name();
}
}
兩種方式的對比
結構複雜度:簡單工廠方法
程式碼複雜度:簡單工廠方法
程式設計複雜度:簡單工廠方法
管理上的複雜度:簡單工廠方法
根據設計原則:工廠方法模式
根據實際業務:簡單工廠模式