建造者模式
介紹
建造者模式注重的是部件構建的程序,意在通過一步一步地精確構造出一個復雜的物件,
可以將建造者模式理解為,假設我們有一個物件需要建立,這個物件是由多個組件(Component)組合而成,每個組件的建立都比較復雜,但運用組件來建立所需的組件物件非常簡單,所以我們就可以將構建復雜組件的步驟與運用組件構建物件分離,從而構造出復雜的物件,
建造者模式包含如下角色:
- 抽象建造者類(Builder):這是一個介面,該介面除了為創建一個Product物件的各個組件定義了若干個方法之外,還要定義回傳Product物件的方法(定義構造步驟);
- 具體建造者類(ConcreteBuilder):實作 Builder 介面的類,實作Builder介面中所定義的方法(生產各個組件);
- 產品類(Product):要創建的復雜物件;
- 指揮者類(Director):指揮者是一個類,該類需要含有Builder介面宣告的變數,指揮者的職責是負責向用戶提供具體生成器,即指揮者將請求具體生成器類來構造用戶所需要的Product物件,如果所請求的具體生成器成功地構造出Product物件,指揮者就可以讓該具體生產器回傳所構造的Product物件,(按照步驟組裝部件,并回傳Product)

舉個??:
構造一臺電腦,需要經過以下步驟:生產主機、生產顯示幕、生產鍵盤、生產滑鼠,雖然不同的電腦需要的主機、顯示幕和鍵鼠型號不同,但不管怎樣,它總是需要按照以上步驟來構建,對于這個例子,我們就可以使用生成器模式來生成一臺電腦,他需要通過多個步驟來生成,代碼如下,
產品類:
public class Computer {
private String keyboard;
private String mouse;
private String screen;
private String Master;
// 省略getter setter toString
}
抽象建造者類:(生產電腦的抽象類)
public abstract class ComputerBuilder {
protected Computer computer = new Computer();
public abstract void buildKeyboard();
public abstract void buildMouse();
public abstract void buildScreen();
public abstract void buildMaster();
public abstract Computer createComputer();
}
具體建造者類:(如惠普、戴爾)
public class HPComputerBuilder extends ComputerBuilder{
@Override
public void buildKeyboard() {
computer.setKeyboard("cherry 青軸機械鍵盤");
}
@Override
public void buildMouse() {
computer.setMouse("雷蛇競技滑鼠");
}
@Override
public void buildScreen() {
computer.setScreen("1920*1080 AOE 28寸曲面屏");
}
@Override
public void buildMaster() {
computer.setMaster("(i7,16g,512SSD,1060)的惠普主機");
}
@Override
public Computer createComputer() {
return computer;
}
}
public class DellComputerBuilder extends ComputerBuilder{
@Override
public void buildKeyboard() {
computer.setKeyboard("dell 青軸機械鍵盤");
}
@Override
public void buildMouse() {
computer.setMouse("dell 官方競技滑鼠");
}
@Override
public void buildScreen() {
computer.setScreen("1920*1080 dell 28寸曲面屏");
}
@Override
public void buildMaster() {
computer.setMaster("(i7,16g,1T SSD,1060)的戴爾主機");
}
@Override
public Computer createComputer() {
return computer;
}
}
指揮者類:(對組件進行組裝并生成產品)
public class Director {
private ComputerBuilder computerBuilder;
public Director(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public Computer constructComputer() {
computerBuilder.buildMaster();
computerBuilder.buildMouse();
computerBuilder.buildScreen();
computerBuilder.buildKeyboard();
return computerBuilder.createComputer();
}
}
指揮者類 Director 在建造者模式中具有很重要的作用,它用于指導具體構建者如何構建產品,控制呼叫先后次序,并向呼叫者回傳完整的產品類,
測驗類:
public class Client {
public static void main(String[] args) {
// 構造一臺戴爾電腦
showComputer(new DellComputerBuilder());
// 構造一臺惠普電腦
showComputer(new HPComputerBuilder());
}
private static void showComputer(ComputerBuilder builder) {
Director director = new Director(builder);
Computer computer = director.constructComputer();
System.out.println(computer);
}
}
優缺點
優點:
- 在建造者模式中,客戶端不必知道產品內部組成的細節,將產品本身與產品的創建程序解耦,使得相同的創建程序可以創建不同的產品物件;
- 將復雜產品的創建步驟分解在不同的方法中,使得創建程序更加清晰,也更方便使用程式來控制創建程序;
- 建造者模式很容易進行擴展,如果有新的需求,通過實作一個新的建造者類(如再構造一臺華碩電腦)就可以完成,基本上不用修改之前已經測驗通過的代碼,因此也就不會對原有功能引入風險,符合開閉原則,
缺點:
- 建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大(如電腦和手機),則不適合使用建造者模式,因此其使用范圍受到一定的限制,
使用場景
創建的物件較復雜,由多個部件構成,各部件面臨著復雜的變化,但構件間的建造順序是穩定的,
創建型模式對比
工廠方法模式注重的是整體物件的創建方式;而建造者模式注重的是部件構建的程序,意在通過一步一步地精確構造創建出一個復雜的物件,舉個例子,如果要創建一臺手機,直接產生一個CPU為天璣9000、運行記憶體為8G、容量為256G、螢屏材質為LCD的智能手機;而如果使用建造者模式,則需要組裝CPU、記憶體、螢屏等部分,
抽象工廠模式實作對產品族的創建,采用抽象工廠模式則是不需要關心構建程序,只關心什么產品由什么工廠生產即可,建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是通過組裝零配件而產生一個新產品,
參考
(140條訊息) 23 種設計模式詳解(全23種)_鬼滅之刃的博客-CSDN博客_設計模式
https://www.bilibili.com/video/BV1Np4y1z7BU
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/509542.html
標籤:其他
上一篇:初識設計模式 - 原型模式
下一篇:初識設計模式 - 原型模式
