加班后去吃蛋炒饭,没想到老板也是程序员

码个蛋

共 4145字,需浏览 9分钟

 · 2021-05-14


目录


  • 故事

  • 建造者模式简介

  • 代码类图

  • 建造者模式应用场景

  • 建造者模式优缺点

  • 思维导图

前言



夜幕下。加班到深夜的码妞,电脑包中已经极致轻薄的香蕉Book Pro,似泰山一半压在她疲惫的身躯上。缓缓的来到“35程序员炒饭店”前。


老板码仔,关切的问道:“今天出Bug了?脸色这么差!”


简介


建造者模式属于创建型模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单说就是:将复杂对象的创建、拆分成多个步骤。


代码类图

                

生成器(Build):它是一个包含创建产品各个子部件的抽象方法的接口或抽象类,通常还包含一个返回复杂产品的方法 getResult()


具体生成器(Concrete Builders):Builder的具体实现,完成复杂产品的各个部件的具体创建方法


主管(Dirctoer):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息;


产品(Products):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件


class Product {
    private String partA;
    private String partB;
    private String partC;

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void show() {
        //显示产品的特性
    }
}


abstract class Builder {
    //创建产品对象
    protected Product product = new Product();

    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();

    //返回产品对象
    public Product getResult() {
        return product;
    }
}


public class ConcreteBuilder extends Builder {
    public void buildPartA() {
        product.setPartA("Builder PartA");
    }

    public void buildPartB() {
        product.setPartB("Builder PartB");
    }

    public void buildPartC() {
        product.setPartC("Builder PartC");
    }
}


class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    //产品构建与组装方法
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}


public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        product.show();
    }
}


用写代码15年的手!光速炒熟。哦!不!光速创建对象。


应用场景、优缺点


场景:


  • 构造函数参数过多,产生重叠构造函数现象时;

  • 需要用类似代码创建不同形式对象时;

  • 对象创建的过程复杂时;


优点:


  • 符合单一责任原则。将构造代码从业务逻辑中抽离出来;

  • 封装性好,对象的创建和表示分离,实现了解耦

  • 需要增加新的建造者时、不需修改原有代码、符合“开闭原则“。

  • 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。


缺点:


  • 代码复杂度提升、维护难度高;

  • 创建对象相似度高,限制了使用范围。

  • 如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,提升后期维护成本。



思维导图

                


程序员不学好设计模式,35岁后。想炒饭!都没人要!


码个蛋专属活动:打卡入口


为什么要做这个活动?

帮你养成好习惯(第四弹)




关注「码个蛋」,一起打卡成长

关注后可获得码仔专属表情包

浏览 57
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报