原始碼在我的github和gitee中獲取
目錄
java23種設計模式—— 一、設計模式介紹
java23種設計模式—— 二、單例模式
java23種設計模式——三、工廠模式
java23種設計模式——四、原型模式
java23種設計模式——五、建造者模式
java23種設計模式——六、配接器模式
java23種設計模式——七、橋接模式
java23種設計模式——八、組合模式
建造者模式
建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個復雜的物件,這種型別的設計模式屬于創建型模式,它提供了一種創建物件的最佳方式,
一句話概括就是建造者模式的目的是為了分離復雜物件的屬性與創建程序,
一、介紹
意圖: 將一個復雜的構建與其表示相分離,使得同樣的構建程序可以創建不同的表示,
主要解決: 主要解決在軟體系統中,有時候面臨著"一個復雜物件"的創建作業,其通常由各個部分的子物件用一定的演算法構成;由于需求的變化,這個復雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法卻相對穩定,
何時使用: 一些基本部件不會變,而其組合經常變化的時候,
如何解決: 將變與不變分離開,
關鍵代碼: 建造者:創建和提供實體,導演:管理建造出來的實體的依賴關系,
應用實體: 1、去肯德基,漢堡、可樂、薯條、炸雞翅等是不變的,而其組合是經常變化的,生成出所謂的"套餐", 2、JAVA 中的 StringBuilder,
優點: 1、建造者獨立,易擴展, 2、便于控制細節風險,
缺點: 1、產品必須有共同點,范圍有限制, 2、如內部變化復雜,會有很多的建造類,
使用場景: 1、需要生成的物件具有復雜的內部結構,這些產品物件通常包含多個成員屬性, 2、需要生成的物件內部屬性本身相互依賴,
注意事項:與工廠模式的區別是:建造者模式更加關注與零件裝配的順序,
以上部分根據菜鳥教程修改
二、實作
我們知道一個電腦生產出來是需要很多部件的,例如cpu,顯卡,硬碟,螢屏,主板等等,
新建一個Computer類
/**
* @author codermy
* @createTime 2020/7/24
*/
@Data
public class Computer {
private String mainBoard;//主板
private String cpu;//cpu
private String ideoCard;//顯卡
private String hardDisk;//硬碟
private String memorie; //記憶體條
}
在生成一個用于建造電腦工序的類
/**
* @author codermy
* @createTime 2020/7/24
* 一臺電腦需要完成的工序
*/
public interface ComputerBuilder {
void buildMainBoard();
void buildCpu();
void buildIdeoCard();
void buildHardDisk();
void buildMemorie();
// 建造結果
Computer build();
}
現在一共可以成產兩種電腦,分別是飛行堡壘 和 拯救者,
飛行堡壘制作工序
/**
* @author codermy
* @createTime 2020/7/24
* 飛行堡壘6
*/
public class ComputerA implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildMainBoard() {
computer.setMainBoard("X550JK");
}
@Override
public void buildCpu() {
computer.setCpu("Intel Core i5");
}
@Override
public void buildIdeoCard() {
computer.setIdeoCard("GTX1060");
}
@Override
public void buildHardDisk() {
computer.setHardDisk("256GB+1TB混合硬碟");
}
@Override
public void buildMemorie() {
computer.setMemorie("DDR4 8GB×1");
}
@Override
public Computer build() {
return computer;
}
}
拯救者制作工序
/**
* @author codermy
* @createTime 2020/7/24
* 拯救者
*/
public class ComputerB implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildMainBoard() {
computer.setMainBoard("15Isk");
}
@Override
public void buildCpu() {
computer.setCpu("Intel Core i7");
}
@Override
public void buildIdeoCard() {
computer.setIdeoCard("GTX1050Ti");
}
@Override
public void buildHardDisk() {
computer.setHardDisk("256GB+1TB混合硬碟");
}
@Override
public void buildMemorie() {
computer.setMemorie("DDR4 16GB×1");
}
@Override
public Computer build() {
return computer;
}
}
新建一個指揮者來指揮完成相應的制作流程
public class Conductor {
private ComputerBuilder computerBuilder;
public void setComputerBuilder(ComputerBuilder computerBuilder){
this.computerBuilder = computerBuilder;
}
// 指揮建造程序
public Computer make(){
computerBuilder.buildMainBoard();
computerBuilder.buildCpu();
computerBuilder.buildHardDisk();
computerBuilder.buildIdeoCard();
computerBuilder.buildMemorie();
return computerBuilder.build();
}
}
客戶要求
/**
* @author codermy
* @createTime 2020/7/24
* 客戶
*/
public class Client {
public static void main(String[] args) {
// 一個指揮者
Conductor conductor = new Conductor();
// 需要ComputerA 飛行堡壘
ComputerA fxbl = new ComputerA();
// 指揮建造ComputerA
conductor.setComputerBuilder(fxbl);
// 得到飛行堡壘
Computer computer1= conductor.make();
System.out.println(computer1);
// 一個指揮者
Conductor conductor2 = new Conductor();
// 需要ComputerA 拯救者
ComputerB zjz = new ComputerB();
// 指揮建造ComputerB
conductor2.setComputerBuilder(zjz);
// 得到拯救者
Computer computer2= conductor2.make();
System.out.println(computer2);
}
}
輸出
Computer(mainBoard=X550JK, cpu=Intel Core i5, ideoCard=GTX1060, hardDisk=256GB+1TB混合硬碟, memorie=DDR4 8GB×1)
Computer(mainBoard=15Isk, cpu=Intel Core i7, ideoCard=GTX1050Ti, hardDisk=256GB+1TB混合硬碟, memorie=DDR4 16GB×1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/43132.html
標籤:Java
