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

本文详细介绍了建造者模式,一种创建型设计模式,用于将复杂对象的构建与表示分离,使得创建过程可独立进行。通过代码示例展示了如何使用建造者模式,包括产品、构建器、具体建造者和导演角色。适用场景包括构造函数参数过多、创建多种形态的对象以及创建过程复杂的场合。虽然建造者模式提高了代码的封装性和扩展性,但也会增加复杂度和维护成本。
摘要由CSDN通过智能技术生成

目录

  • 故事

  • 建造者模式简介

  • 代码类图

  • 建造者模式应用场景

  • 建造者模式优缺点

  • 思维导图

前言

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

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

为什么要做这个活动?

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


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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值