Java 24 Design Pattern 之 建造者模式

本文详细介绍了Java中的建造者模式,包括其概念、使用场景和实现方式。建造者模式主要用于解决构造函数参数过多导致的代码可读性和易用性问题。通过示例代码展示了如何使用建造者模式创建对象,以及对比了传统构造函数和属性设置方式的不足。同时,文章还讨论了标准和非标准的Builder模式实现,强调了设计模式在实际开发中的灵活运用。
摘要由CSDN通过智能技术生成

建造者模式介绍

概述

使用场景

建造者模式实现

建造者模式实现


建造者模式介绍

概述

在我们工作中常常会出现建造者模式的身影,它是一种比较常用的创建型设计模式。建造者模式的原理和代码实现非常简单,掌握起来并不难。

使用场景

当一个类的构造函数参数有多个,而且这些参数有些是可选的参数,就可以考虑使用建造者模式了。

还是看一个场景,我们现在有如下一个雇员类:

class Employee{
    private String name; //名字,必须
    private int age;        //年龄,必须
    private String sex; //性别,可选
    private String country; //国家,可选
}

在实例化对象时其中name和age是必填参数,而sex和country是可选参数,那么我们如何构造这个类的实例呢,通常有两种方式:

  1. 1. 折叠构造函数模式

class Employee{
    ...........
    ..........

    public Employee(String name, int age){
        this(name, age, "男");
    }

    public Employee(String name, int age, String sex){
        this(name, age, sex, "中国");
    }

    public Employee(String name, int age, String sex, String country){
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.country = country;
    }
}

通过这种方式,我们可以根据需要,选择不同形式的构造函数创建对象。

  1. 2. 属性设置模式:

class Employee{
    ...........
    ..........

    public Employee(){
        
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

//使用
public static void main(String[] args) {
    Employee employee = new Employee();
    employee.setName("宋江");   //还有属性 没有设置,对象还处于无效状态
    employee.setAge(66);          //还有属性 没有设置,对象还处于无效状态
    employee.setSex("男");        //还有属性 没有设置,对象还处于无效状态
    employee.setCountry("大宋");   //所有属性设置完成,对象可用了

    System.out.println(employee);
}

******************【运行结果】******************
Employee{name='宋江', age=66, sex='男', country='大宋'}

两种方式都能创建出你想要的对象,但是两种方式都有其弊端:

  • • 1.第一种方式在构建对象调用构造函数时,你首先要决定使用哪一个构造函数,当可选参数很多的时候,你就要非常清楚这些参数的含义,否则很容易就传混了。

  • • 2.第二种方式在构建对象的过程中,对象的属性是分步设置的,会出现无效状态,容易出错。

正是因为前面两种方式都有其不足之处,所以就出现了建造者模式。

建造者模式实现

建造者模式实现

以上面的业务场景为例,可以按照下面的方式写出对应的建造者模式的代码。

class Employee{
    private String name;
    private int age;
    private String sex; //性别,可选
    private String country; //国家,可选

    //在Employee中创建一个private的构造函数,参数为Builder类型
    private Employee(Builder builder){
        this.name = builder.name;
        this.age = builder.age;
        thi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

time Friend

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值