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

總結
神醫(yī)豆豆有一套煉制丹藥的方流程,所以不論丹方如何變化,但是煉丹流程都一樣。想要煉制其他丹藥只需要一個丹方就可以完成。
到此這篇關于Java 設計模式以虹貓藍兔的故事講解建造者模式的文章就介紹到這了,更多相關Java 建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java.util.NoSuchElementException原因及兩種解決方法
本文主要介紹了java.util.NoSuchElementException原因及兩種解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06
Java使用Sftp和Ftp實現(xiàn)對文件的上傳和下載
這篇文章主要介紹了Java使用Sftp和Ftp實現(xiàn)對文件的上傳和下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
Java使用Spring JdbcTemplate向in語句中傳遞參數(shù)的教程詳解
這篇文章主要給大家介紹Java如何使用Spring JdbcTemplate向in語句中傳遞參數(shù),文中有詳細的流程步驟和代碼示例,需要的朋友可以參考下2023-07-07

