设计模式-Builder模式
目錄
- 一個例子(做湯)
- 人工做湯
- 機(jī)器做湯(使用Builder模式)
- 優(yōu)缺點
- 優(yōu)點
- 缺點
Builder模式屬于創(chuàng)建型模式。
它是將一個復(fù)雜對象的構(gòu)建過程隱藏起來,讓使用者只關(guān)系自己要生成什么樣的對象。即創(chuàng)建和表示分離。
一個例子(做湯)
我需要做兩種湯:小雞燉蘑菇湯和海帶排骨湯。
做湯工序如下:
海帶排骨湯:
小雞燉蘑菇:
聲明“湯”對象:
public class Soup {/*** 材料1*/private String cailiao1;/*** 材料2*/private String cailiao2;/*** 材料3*/private String cailiao3;//getter/setter省略@Overridepublic String toString() {return "Soup{" +"cailiao1='" + cailiao1 + '\'' +", cailiao2='" + cailiao2 + '\'' +", cailiao3='" + cailiao3 + '\'' +'}';} }人工做湯
//人工做湯System.out.println("-----人工做湯-----");//制作小雞燉蘑菇湯System.out.println("-----制作小雞燉蘑菇-----");Soup xiaojimoguSoup = new Soup();xiaojimoguSoup.setCailiao1("小雞兒");xiaojimoguSoup.setCailiao2("蘑菇");xiaojimoguSoup.setCailiao3("小雞燉蘑菇精粉");System.out.println("小雞燉蘑菇:"+xiaojimoguSoup);//制作海帶排骨湯System.out.println("-----制作海帶排骨湯-----");Soup haidaipaiguSoup = new Soup();haidaipaiguSoup.setCailiao1("海帶");haidaipaiguSoup.setCailiao2("排骨");haidaipaiguSoup.setCailiao3("海帶排骨精粉");System.out.println("海帶排骨湯:"+haidaipaiguSoup);可以看到做湯的時候需要添加什么材料全靠我自己去操作,這無疑是很復(fù)雜且繁瑣的。
機(jī)器做湯(使用Builder模式)
現(xiàn)在我購買了一個做湯的==機(jī)器==,可以做各種各樣的湯,這取決于你給機(jī)器選擇什么樣的==程序==。
做湯程序通用接口:
public interface SoupProgram {void step1();//步驟1void step2();//步驟2void step3();//步驟3Soup make();//做湯 }做小雞燉蘑菇的程序:
public class XiaojimoguSoupProgram implements SoupProgram {private Soup soup = new Soup();@Overridepublic void step1() {soup.setCailiao1("小雞兒");System.out.println("加入小雞兒");}@Overridepublic void step2() {soup.setCailiao2("蘑菇");System.out.println("加入蘑菇");}@Overridepublic void step3() {soup.setCailiao3("小雞燉蘑菇精粉");System.out.println("加入小雞燉蘑菇精粉");}@Overridepublic Soup make() {System.out.println("小雞燉蘑菇湯制作好啦~");return soup;} }做海帶排骨湯程序:
public class HaidaipaiguSoupProgram implements SoupProgram {private Soup soup = new Soup();@Overridepublic void step1() {soup.setCailiao1("海帶");System.out.println("加入海帶");}@Overridepublic void step2() {soup.setCailiao2("排骨");System.out.println("加入排骨");}@Overridepublic void step3() {soup.setCailiao3("海帶排骨精粉");System.out.println("加入海帶排骨精粉");}@Overridepublic Soup make() {System.out.println("海帶排骨湯制作好啦~");return soup;} }做湯機(jī)器:
public class SoupMakeMachine {public static Soup builder(SoupProgram program) {program.step1();program.step2();program.step3();return program.make();} }現(xiàn)在我只需要選擇使用哪個做湯程序就可以用機(jī)器來完成做湯了。
//機(jī)器做湯System.out.println("-----機(jī)器做湯-----");//制作小雞燉蘑菇湯System.out.println("-----制作小雞燉蘑菇-----");SoupProgram program = new XiaojimoguSoupProgram();System.out.println("小雞燉蘑菇:"+SoupMakeMachine.builder(program));//制作海帶排骨湯System.out.println("-----制作海帶排骨湯-----");SoupProgram program1 = new HaidaipaiguSoupProgram();System.out.println("海帶排骨湯:"+SoupMakeMachine.builder(program1));優(yōu)缺點
優(yōu)點
1.隱藏對象的創(chuàng)建過程,將對象創(chuàng)建過程和對象本身解耦,使用者只需要關(guān)心要創(chuàng)建什么樣的東西。通過這個例子人工和機(jī)器做湯的比較,很明顯能發(fā)現(xiàn)使用機(jī)器能方便很多。現(xiàn)實生活中也是如此(如工廠流水線)。
2.方便擴(kuò)展。上面也提到了,機(jī)器做湯,做什么樣的湯取決于選擇什么樣的程序,如果你想做玉米蘿卜湯,那你只需要給機(jī)器植入做玉米蘿卜湯的程序(即實現(xiàn)SoupProgram接口)。
3.遵循了“開閉原則”。對象應(yīng)該對擴(kuò)展開放對修改關(guān)閉。
缺點
通過上面的代碼,很明顯能感覺到,使用這個Builder設(shè)計模式以后引入了更多的類和接口,增加了復(fù)雜度。
你可以在這里獲取相關(guān)代碼:設(shè)計模式-Builder模式
轉(zhuǎn)載于:https://www.cnblogs.com/xuxiaojian/p/11460397.html
總結(jié)
以上是生活随笔為你收集整理的设计模式-Builder模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis整合spring下的的各种
- 下一篇: 区分 JVM 内存结构、 Java 内存