Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式
什么是建造者模式
建造者(Builder)模式的定義: 指將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計(jì)模式被稱為建造者模式。它是將一個復(fù)雜的對象分解為多個簡單的對象,然后一步一步構(gòu)建而成。它將變與不變相分離,即產(chǎn)品的組成部分是不變的,但每一部分是可以靈活選擇的。
優(yōu)點(diǎn)
1、封裝性好,構(gòu)建和表示分離。
2、擴(kuò)展性好,各個具體的建造者相互獨(dú)立,有利于系統(tǒng)的解耦。
3、客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),建造者可以對創(chuàng)建過程逐步細(xì)化,而不對其它模塊產(chǎn)生任何影響,便于控制細(xì)節(jié)風(fēng)險。
缺點(diǎn)
1、產(chǎn)品的組成部分必須相同,這限制了其使用范圍。
2、如果產(chǎn)品的內(nèi)部變化復(fù)雜,如果產(chǎn)品內(nèi)部發(fā)生變化,則建造者也要同步修改,后期維護(hù)成本較大。
知識點(diǎn)
建造者(Builder)模式和工廠模式的關(guān)注點(diǎn)不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用。
建造者模式實(shí)現(xiàn)
案例: 神醫(yī)豆豆煉丹
產(chǎn)品角色(Product):丹藥
抽象建造者(Builder):抽象丹方
具體建造者(Concrete Builder):具體丹方
指揮者(Director):神醫(yī)豆豆
神醫(yī)豆豆煉制九轉(zhuǎn)仙丹和太虛化神丹
注意:為了省事這里說的丹方內(nèi)容只有丹藥名字和效果,并沒有材料之類的。
丹藥
丹藥類聲明煉丹的名稱和效果兩個屬性
public class Dan {
/* cailiao 丹藥的名稱
danhuo 丹藥的效果*/
private String name;
private String xiaoguo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getXiaoguo() {
return xiaoguo;
}
public void setXiaoguo(String xiaoguo) {
this.xiaoguo = xiaoguo;
}
}
抽象丹方
抽象類,new一個丹藥對象,聲明兩個抽象方法分別是給丹藥命名和賦予丹藥效果,還有一個生成丹藥的方法。
//抽象丹方
abstract class DanFang {
Dan dan = new Dan();
public abstract void name();
public abstract void xiaoguo();
public Dan getDan() {
return dan;
}
}
九轉(zhuǎn)仙丹丹方
具體丹方類繼承丹方類,并且實(shí)現(xiàn)兩個抽象方法。
//九轉(zhuǎn)仙丹丹方
public class JiuZhuan extends DanFang {
@Override
public void name() {
dan.setName("九轉(zhuǎn)仙丹");
}
@Override
public void xiaoguo() {
dan.setXiaoguo("原地成仙");
}
}
太虛化神丹丹方
具體丹方類繼承丹方類,并且實(shí)現(xiàn)兩個抽象方法。
//太虛化神丹丹方
public class Taixu extends DanFang {
@Override
public void name() {
dan.setName("太虛化神丹");
}
@Override
public void xiaoguo() {
dan.setXiaoguo("意念化神");
}
}
神醫(yī)豆豆
聲明一個丹方屬性,一個有參構(gòu)造方法,一個煉丹方法。
public class DouDou {
private final DanFang danLu;
public DouDou(DanFang danLu) {
this.danLu = danLu;
}
//煉丹方法
public Dan lian() {
//放入材料
danLu.name();
//釋放丹火
danLu.xiaoguo();
//成丹
return danLu.getDan();
}
}
測試
煉制兩個丹藥。
public class Demo {
public static void main(String[] args) {
//煉制九轉(zhuǎn)仙丹
//new一個九轉(zhuǎn)仙丹的丹方
DanFang jiu = new JiuZhuan();
//把丹方給豆豆
DouDou dou = new DouDou(jiu);
//煉丹生成丹藥
Dan dan = dou.lian();
System.out.printf("丹藥名稱:%s 丹藥效果:%s", dan.getName(), dan.getXiaoguo());
System.out.println();
//煉制太虛化神丹
//new一個九轉(zhuǎn)仙丹的丹方
DanFang tai = new Taixu();
//把丹方給豆豆
DouDou dous = new DouDou(tai);
//煉丹生成丹藥
Dan dans = dous.lian();
System.out.printf("丹藥名稱:%s 丹藥效果:%s", dans.getName(), dans.getXiaoguo());
}
}

總結(jié)
神醫(yī)豆豆有一套煉制丹藥的方流程,所以不論丹方如何變化,但是煉丹流程都一樣。想要煉制其他丹藥只需要一個丹方就可以完成。
到此這篇關(guān)于Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式的文章就介紹到這了,更多相關(guān)Java 建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Intellij IDEA中啟動多個微服務(wù)(開啟Run Dashboard管理)
這篇文章主要介紹了Intellij IDEA中啟動多個微服務(wù)(開啟Run Dashboard管理),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
實(shí)踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式
本篇講解了SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式,通過實(shí)踐的方式更通俗易懂,對此不了解的同學(xué)跟著小編往下看吧2021-09-09
Value注解支持對象類型ConfigurationProperties功能
這篇文章主要為大家介紹了Value注解支持對象類型ConfigurationProperties功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

