設計模式總結筆記<三> 建造者模式前篇

文章同步發放到CSDN博客

一、場景
當需要生產一輛汽車時,我們需要為其裝配發動機、輪胎、座椅等等部件,這個裝配過程是比較復雜的而且也需要較高的組裝技術。而建造者模式(Builder Pattern)就是為了將部件與組裝分離開。

二、 概念
  將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。

與抽象工廠的區別:在建造者模式里,有個指導者,由指導者來管理建造者,用戶是與指導者聯系的,指導者聯系建造者最后得到產品。即建造模式可以強制實行一種分步驟進行的建造過程。

建造模式是將復雜的內部創建封裝在內部,對于外部調用的人來說,只需要傳入建造者和建造工具,對于內部是如何建造成成品的,調用者無需關心。

三、建造者模式結構組成

  • Product: 表示被構造的復雜對象,其中包含需要構建的部件屬性。
  • Builder: 創建一個產品對象的各個部件指定抽象接口。
  • ConcreteBuilder: 實現Builder的接口以構造和裝配該產品的各個部件,定義并明確它所創建的表示。
  • Director: 調用具體建造者角色以創建產品對象。

下面以構建一輛汽車為例,寫示例代碼:
1.Product角色:組裝一輛汽車首先的有各種配件,如發動機、輪胎、座椅等。

public class Car{
    public String engine;
    public String tyre;
    public String seat;
    public Car(){

    }

    public String getEngine() {
        return engine;
    }
    public void setEngine(String engine) {
        this.engine = engine;
    }
    public String getTyre() {
        return tyre;
    }
    public void setTyre(String tyre) {
        this.tyre = tyre;
    }
    public String getSeat() {
        return seat;
    }
    public void setSeat(String seat) {
        this.seat = seat;
    }

}

2.Builder角色:知道了所需配件后,就需要生產配件了,定義一個生產配件的抽象建造者接口。

public interface Builder {
    String buildEngine();
    String buildTyre();
    String buildSeat();
}   

3.ConcreteBuilder角色:實現抽象的 建造者接口生成具體的建造者,并開始生產具體的配件。

public class CarBuilder implements Builder{

    @Override
    public String buildEngine() {
        // 生產發動機
        return "發動機";
    }

    @Override
    public String buildTyre() {
        // 生產輪胎
        return "輪胎";
    }

    @Override
    public String buildSeat() {
        // 生產座椅
        return "座椅";
    }
}

4.Director角色:在生產出配件后,由指導者指導組裝配件生成汽車。

public class CarDirector {
    CarBuilder cb;
    public CarDirector(CarBuilder cb){
        this.cb=cb;
    }
    public Car constructCar(){
        Car car=new Car();
        car.setEngine(cb.buildEngine());
        car.setTyre(cb.buildTyre());
        car.setSeat(cb.buildSeat());
        return car;
    }
}

5.最終得到一輛汽車:

public class Client {

    public static void main(String[] args) {
        CarDirector carDirector=new CarDirector(new CarBuilder());
        Car car=carDirector.constructCar();
        System.out.println(car.getEngine()+car.getTyre()+car.getSeat());
        }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容