java設計模式之 -- 工廠模式
阿新 • • 發佈:2020-07-30
工廠模式(Factory Pattern)
Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。
先說下簡單的工廠方法模式:
汽車介面
/** * 汽車介面 */ public interface Car{ String getType(); }
豪華轎車:limousine
/** * 豪華汽車 */ public class limousine implements Car{ private String type = "豪華汽車"; @Override public String getType() { return type; } }
貨車:truck
/** * 貨車 */ public class truckimplements Car{ private String type = "貨車"; @Override public String getType() { return type; } }
車工廠:CarFactory
public class CarFacotry { public staticCar creatCar(String type){ switch (type){ case "貨車": return new Truck(); case "豪華汽車": return new Limousine(); default: return null; } } }
測試類
public class Clineter { public static voidmain(String[] args) { Car car = CarFacotry.creatCar("貨車"); System.out.println(car.getType()); } }
列印結果:
這就是簡單工廠方法,只有一個工廠類來面向多個目標實現。當目標實現增多時,我們不得不去修改工廠類的方法,使其相容新的實現型別,這明顯違背了開閉原則,所以出現了工廠方法模式。
二、工廠模式
汽車介面
public interface Car { String getType(); }
豪華轎車:limousine
public class Limousine implements Car { private String type = "豪華汽車"; @Override public String getType() { return type; } }
貨車:
public class Truck implements Car { private String type = "貨車"; @Override public String getType() { return type; } }
車的工廠介面:
public interface CarFactory {
//這裡就不用定義是什麼型別的車了,想用什麼型別的車直接呼叫對應型別車的工廠就好 Car creatCar(); }
豪華汽車工廠:
public class LimousineFactory implements CarFactory{ @Override public Car creatCar() { return new Limousine(); } }
貨車工廠:
public class TruckFactory implements CarFactory{ @Override public Car creatCar() { return new Truck(); } }
測試類:
public class Clineter { public static void main(String[] args) { // CarFactory carFacotry = new TruckFactory(); Car car = carFacotry.creatCar(); System.out.println(car.getType()); } }
從上面的例項中可以很容易看出來,工廠方法模式的重點就在這個工廠介面了。
目標可以無限擴充套件,工廠類也要隨之擴充套件,一對一存在,滿足了開閉原則,但如果目標實現較多,工廠實現類也會增多,不簡潔。
MyBatis中使用的比較多,事務模組和資料來源模組都使用了工廠方法模式。
使用場景:1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。 2、資料庫訪問,當用戶不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。 3、設計一個連線伺服器的框架,需要三個協議,"POP3"、"IMAP"、"HTTP",可以把這三個作為產品類,共同實現一個介面。
注意事項:作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過 new 就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度。