關於工廠模式和建造者模式的理解
阿新 • • 發佈:2018-11-18
通常情況下java裡面建立一個物件都是直接使用new關鍵字,但是隨著對java理解的深入逐漸會接觸到設計模式,設計模式中關於物件建立的模式主要有兩種:工廠模式和建造者模式,在這篇博文中來探討一下這三種建立物件方式的理解,不當之處,望大家指正。
一、使用new關鍵字直接建立
假設我們有一個car類
public class Car{
private String name;
public Car(){}
public String getName(){
return this.name;
}
public void setName (String name){
this.name = name;
}
}
因為car的屬性很簡單,建立直接呼叫器無參構造器就可以。
public static void main(String[] args) {
Car car = new Car();
System.out.println(car.getName());
}
二、工廠模式建立
如果我們的car物件建立需要用到依賴一些外部屬性
public class Car{
private Engine engine; // 發動機引擎
Private Navigationer navigationer;//導航
public Car(){
this.engine = engine;
this.navigationer= navigationer;
}
public void drive(){
engine.start();
navigationer.navigation();
}
}
car的建立需要engine,navigation兩個物件的引用,但是可能我們用到car類的地方並不關係car用的是是何種引擎,使用的是那種導航軟體。這個時候如果為了建立car物件而把engine和navigationer兩個物件引入到使用car的類裡面,顯然是增加了類與類之間的耦合,在設計軟體的時候我們要儘量做到收斂物件影響範圍,所以這裡我們需要一個物件建立工廠,將該物件建立所需要用到的屬性收斂到工廠類裡面。
public class CarFactory{
private Engine engine; // 發動機引擎
Private Navigationer navigationer;//導航
public Car Create(){
return new Car(engine,navigationer);
}
}
三、建造者模式
當car的建立過程變得過於複雜,為了讓使用者容易理解複雜物件的建立過程,我們需要用到建造者模式,隱藏建立時的複雜邏輯。
public class CarBuilder{
private Engine engine; // 發動機引擎
Private Navigationer navigationer;//導航
private Map map;
public Car build(){
navigationer.setMap(map);
return new Car(engine,navigationer);
}
public CarBuilder setEngine(Engine engine){
this.engine=engine;
return this;
}
public CarBuilder setNavigationer(Navigationer navigationer){
this.navigationer = navigationer;
return this;
}
public CarBuilder setMap(Map map) {
this.map = map;
return this;
}
}