1. 程式人生 > >關於工廠模式和建造者模式的理解

關於工廠模式和建造者模式的理解

通常情況下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;
    }

}