Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式
什么是建造者模式
建造者(Builder)模式的定義: 指將一個(gè)復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計(jì)模式被稱為建造者模式。它是將一個(gè)復(fù)雜的對象分解為多個(gè)簡單的對象,然后一步一步構(gòu)建而成。它將變與不變相分離,即產(chǎn)品的組成部分是不變的,但每一部分是可以靈活選擇的。
優(yōu)點(diǎn)
1、封裝性好,構(gòu)建和表示分離。
2、擴(kuò)展性好,各個(gè)具體的建造者相互獨(dú)立,有利于系統(tǒng)的解耦。
3、客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),建造者可以對創(chuàng)建過程逐步細(xì)化,而不對其它模塊產(chǎn)生任何影響,便于控制細(xì)節(jié)風(fēng)險(xiǎn)。
缺點(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)容只有丹藥名字和效果,并沒有材料之類的。
丹藥
丹藥類聲明煉丹的名稱和效果兩個(gè)屬性
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一個(gè)丹藥對象,聲明兩個(gè)抽象方法分別是給丹藥命名和賦予丹藥效果,還有一個(gè)生成丹藥的方法。
//抽象丹方 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)兩個(gè)抽象方法。
//九轉(zhuǎn)仙丹丹方 public class JiuZhuan extends DanFang { @Override public void name() { dan.setName("九轉(zhuǎn)仙丹"); } @Override public void xiaoguo() { dan.setXiaoguo("原地成仙"); } }
太虛化神丹丹方
具體丹方類繼承丹方類,并且實(shí)現(xiàn)兩個(gè)抽象方法。
//太虛化神丹丹方 public class Taixu extends DanFang { @Override public void name() { dan.setName("太虛化神丹"); } @Override public void xiaoguo() { dan.setXiaoguo("意念化神"); } }
神醫(yī)豆豆
聲明一個(gè)丹方屬性,一個(gè)有參構(gòu)造方法,一個(gè)煉丹方法。
public class DouDou { private final DanFang danLu; public DouDou(DanFang danLu) { this.danLu = danLu; } //煉丹方法 public Dan lian() { //放入材料 danLu.name(); //釋放丹火 danLu.xiaoguo(); //成丹 return danLu.getDan(); } }
測試
煉制兩個(gè)丹藥。
public class Demo { public static void main(String[] args) { //煉制九轉(zhuǎn)仙丹 //new一個(gè)九轉(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一個(gè)九轉(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ī)豆豆有一套煉制丹藥的方流程,所以不論丹方如何變化,但是煉丹流程都一樣。想要煉制其他丹藥只需要一個(gè)丹方就可以完成。
到此這篇關(guān)于Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式的文章就介紹到這了,更多相關(guān)Java 建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章

Java集合類的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系詳解

java.util.NoSuchElementException原因及兩種解決方法

Java使用Sftp和Ftp實(shí)現(xiàn)對文件的上傳和下載

Java使用Spring JdbcTemplate向in語句中傳遞參數(shù)的教程詳解

Java面試之限流的實(shí)現(xiàn)方式小結(jié)