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

互联网全栈架构

共 4212字,需浏览 9分钟

 ·

2021-05-20 09:53


目录


  • 故事

  • 建造者模式简介

  • 代码类图

  • 建造者模式应用场景

  • 建造者模式优缺点

  • 思维导图

前言



夜幕下。加班到深夜的码妞,电脑包中已经极致轻薄的香蕉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岁后。想炒饭!都没人要!


推荐阅读:

SpringBoot开发秘籍 - 集成Graphql Query

Linux 文件搜索神器 find 实战详解,建议收藏!

猫扑,凉了!

搞清楚这 10 几个后端面试问题,工作稳了!


互联网全栈架构

 

浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报