懒得取标题2

Java代码优化-第二章

了解一下什么是Builder模式?

  Builder 模式是一种创建型设计模式,它主要解决的是复杂对象构造的问题。通俗来讲,就是将对象的创建过程封装起来,使得创建过程可以灵活的使用,而且易于维护。
  在 Builder 模式中,我们通过定义一个 Builder 类来封装对象的创建过程,其主要作用是隔离了复杂对象的构造和表示,从而使得相同的构建过程可以创建不同的表示。通常来讲, Builder 类会由多个设置方法,每个方法对应对象中的一个属性,这样就可以按照我们所需的任意顺序来设置对象的属性。
  使用 Builder 模式的主要优势在于,可以将对象的创建逻辑与客户端代码分离,从而可以控制对象的创建过程并根据需要进行更改。此外,Builder 模式还可以解决一些复杂对象的问题,例如多个部件之间的构造关系,或者需要根据不同的条件构造不同的对象等。因此, Builder 模式被广泛应用于工厂模式和抽象工厂模式的实现中。

小知识:与Builder模式背道而驰的是直接构造对象(直接实例化对象),也就是说在代码中通过new关键字来构造对象。

问题代码

//问题代码原代码通常将实例化直接进行逐个set赋值
public class User {
    private String name; 
    private String telephone; 
    private String sex; 
    private int age; 
    private String address; 
	//getter、setter略
}
//其余略

解决方案-使用builder模式重构

//此为样例 请自行重构

//主类User 
public class User {
    private String name;
    private String telephone; 
    private String sex; 
    private int age;
    private String address; 
    
	//1、builder 类将属性统一赋值给builder类
	//2、后续添加参数只需在builder类添加所需要传入的参数
	//3、注意主类的构造方法赋值,给予builder类的赋值 如:this.主类参数 = builder类参数;
    private User(UserBuilder builder) {
        this.name = builder.name;
        this.telephone = builder.telephone;
        this.sex = builder.sex;
        this.age = builder.age;
        this.address = builder.address;
        //3、注意主类的构造方法赋值,给予builder类的赋值 如:this.主类参数 = builder类参数;
       //this.主类参数 = builder类参数;
    }

	//UserBuilder ——Builder类
    public static class UserBuilder {
        private String name;
        private String telephone;
        private String sex;
        private int age;
        private String address;

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

        public UserBuilder setTelephone(String telephone) {
            this.telephone = telephone;
            return this;
        }

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

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

        public UserBuilder setAddress(String address) {
            this.address = address;
            return this;
        }
    }
}

//样例
public static void main(String[] args) {
	//1、用UserBuilder类创建对象复制
	//2、将赋值的参数全部赋予User类
	//3、Builder 对象上逐个调用set的方法,然后再调用 build() 方法来构造对象
    User user = new User.UserBuilder()
            .setName("张三")
            .setTelephone("18812546788")
            .setSex("男")
            .setAge(31)
            .build();
    System.out.println("通过Builder模式构建的User对象: " + user);
}

个人总结:
1、Builder 对象上逐个调用set的方法,然后再调用 build() 方法来构造对象。虽然这样做可能会稍微麻烦一些,但相比起直接使用构造函数或者 setter 方法来说,这样做能够带来很多好处;
2、Builder 模式的核心是将一个复杂对象的构建过程拆分成多个简单的步骤,每个步骤都有相应的设置方法。这样做的好处是可以根据需要修改构建过程中的某些步骤,而不需要修改构造函数或者 setter 方法的参数结构,提高了代码的灵活性和可维护性;
3、可以根据需求写不同的构造方法,只需要改动赋值方法即可不用触动过多业务代码;
4、后续需要参数只需改动 Builder 类和主类的构造方法即可。

参考链接:
https://blog.csdn.net/u014454538/article/details/122377789

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值