Builder设计模式
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Builder模式,又稱生成器或構(gòu)建者模式,屬于對(duì)象創(chuàng)建型模式,側(cè)重于一步一步的構(gòu)建復(fù)雜對(duì)象,只有在構(gòu)建完成后才會(huì)返回生成的對(duì)象。Builder模式將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
使用場(chǎng)景
1、當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí),比如買一臺(tái)電腦,我不需要知道電腦CPU,主板,機(jī)箱是如何生產(chǎn)的,也不需要知道它們是如何組裝的。
2、當(dāng)構(gòu)造過程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí),比如一臺(tái)電腦即可以使用AMD的CPU,也可以使用Inter的CPU,這些都是可以根據(jù)需求變化的。
/*** 構(gòu)建者模式:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。* * @author qbg* */ public class BuilderPattern {/*** 機(jī)箱抽象類*/abstract class Crate {public String toString() {return "abstract crate...";}}/*** 酷冷至尊機(jī)箱*/class CoolerMasterCrate extends Crate {public String toString() {return "CoolerMaster crate...";}}/*** CPU抽象類*/abstract class CPU {public String toString() {return "abstract cpu...";}}/*** AMD CPU*/class AMDCPU extends CPU {public String toString() {return "AMD cpu...";}}/*** 主板抽象類*/abstract class Motherboard {public String toString() {return "abstract motherboard...";}}/*** 華碩主板*/class ASUSMotherboard extends Motherboard {public String toString() {return "ASUS motherboard...";}}/*** 電腦定義類*/class Computer {CPU cpu; // cpuMotherboard motherboard; // 主板Crate crate;// 機(jī)箱public String toString() {return "CPU:" + cpu + "\nMotherboard:" + motherboard + "\nCrate:"+ crate;}}/*** 電腦構(gòu)建者接口,可以將CPU等部件通過工廠模式來生產(chǎn),以進(jìn)一步分離產(chǎn)品部件生成和構(gòu)建的過程...*/interface ComputerBuilder {public ComputerBuilder buildCPU();public ComputerBuilder buildMotherboard();public ComputerBuilder buildCrate();public Computer getProduct();}/*** 最熱臺(tái)式電腦構(gòu)建實(shí)現(xiàn)類*/class HotDeskComputerBuilder implements ComputerBuilder {private Computer computer;public HotDeskComputerBuilder() {this.computer = new Computer();}public ComputerBuilder buildCPU() {computer.cpu = new AMDCPU();return this;}public ComputerBuilder buildMotherboard() {computer.motherboard = new ASUSMotherboard();return this;}public ComputerBuilder buildCrate() {computer.crate = new CoolerMasterCrate();return this;}public Computer getProduct() {buildMotherboard().buildCPU().buildCrate();return computer;}}/*** 導(dǎo)向器,客戶端通過導(dǎo)向器獲取產(chǎn)品, 而不關(guān)心導(dǎo)向器是怎樣獲取到Builder生成器 構(gòu)建的產(chǎn)品對(duì)象的。而具體的構(gòu)建過程則交給具體的Builder。*/class Director {private ComputerBuilder builder;public Director(ComputerBuilder builder) {this.builder = builder;}/*** 返回構(gòu)造好的產(chǎn)品*/public Computer construct() {return builder.getProduct();}}public static void main(String[] args) {BuilderPattern bp = new BuilderPattern();ComputerBuilder builder = bp.new HotDeskComputerBuilder();Director director = bp.new Director(builder);Computer computer = director.construct();System.out.println(computer);} }模式優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、可以改變一個(gè)產(chǎn)品的內(nèi)部表示,比如示例中只要實(shí)現(xiàn)一個(gè)新的ComputerBuilder就能改變電腦的內(nèi)部組件,因?yàn)殡娔X的表示和內(nèi)部結(jié)構(gòu)是獨(dú)立于客戶端代碼的。
2、將構(gòu)造代碼和表示代碼分離,構(gòu)造代碼相當(dāng)于builder,表示代碼相當(dāng)于director。不同的導(dǎo)向器可以使用相同的生成器也構(gòu)造不同的產(chǎn)品。
轉(zhuǎn)載于:https://my.oschina.net/duanvincent/blog/775127
總結(jié)
以上是生活随笔為你收集整理的Builder设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海量日志数据分析与应用》场景介绍及技术点
- 下一篇: Restful API 设计规范实战