Builder设计模式
生活随笔
收集整理的這篇文章主要介紹了
Builder设计模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
Builder模式,又稱生成器或構建者模式,屬于對象創建型模式,側重于一步一步的構建復雜對象,只有在構建完成后才會返回生成的對象。Builder模式將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
使用場景
1、當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時,比如買一臺電腦,我不需要知道電腦CPU,主板,機箱是如何生產的,也不需要知道它們是如何組裝的。
2、當構造過程必須允許被構造的對象有不同的表示時,比如一臺電腦即可以使用AMD的CPU,也可以使用Inter的CPU,這些都是可以根據需求變化的。
/*** 構建者模式:將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創建不同的表示。* * @author qbg* */ public class BuilderPattern {/*** 機箱抽象類*/abstract class Crate {public String toString() {return "abstract crate...";}}/*** 酷冷至尊機箱*/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;// 機箱public String toString() {return "CPU:" + cpu + "\nMotherboard:" + motherboard + "\nCrate:"+ crate;}}/*** 電腦構建者接口,可以將CPU等部件通過工廠模式來生產,以進一步分離產品部件生成和構建的過程...*/interface ComputerBuilder {public ComputerBuilder buildCPU();public ComputerBuilder buildMotherboard();public ComputerBuilder buildCrate();public Computer getProduct();}/*** 最熱臺式電腦構建實現類*/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;}}/*** 導向器,客戶端通過導向器獲取產品, 而不關心導向器是怎樣獲取到Builder生成器 構建的產品對象的。而具體的構建過程則交給具體的Builder。*/class Director {private ComputerBuilder builder;public Director(ComputerBuilder builder) {this.builder = builder;}/*** 返回構造好的產品*/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);} }模式優缺點
優點:
1、可以改變一個產品的內部表示,比如示例中只要實現一個新的ComputerBuilder就能改變電腦的內部組件,因為電腦的表示和內部結構是獨立于客戶端代碼的。
2、將構造代碼和表示代碼分離,構造代碼相當于builder,表示代碼相當于director。不同的導向器可以使用相同的生成器也構造不同的產品。
轉載于:https://my.oschina.net/duanvincent/blog/775127
總結
以上是生活随笔為你收集整理的Builder设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海量日志数据分析与应用》场景介绍及技术点
- 下一篇: Restful API 设计规范实战