为了账号安全,请及时绑定邮箱和手机立即绑定

当我们可以用 setter 做同样的事情时,为什么我们需要使用 builder 设计模式?

当我们可以用 setter 做同样的事情时,为什么我们需要使用 builder 设计模式?

温温酱 2022-10-12 15:54:33
public class Employee {    private String name;    private String address;    private int id;    public Employee() {        // TODO Auto-generated constructor stub    }    @Override    public String toString() {        return "Employee [name=" + name + ", address=" + address + ", id=" + id + "]";    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }}public class Main {     public static void main(String[] args) {        Employee e = new Employee();        e.setName("Priyanka");        Employee e1 = new Employee();        e1.setName("Rahul");        e1.setAddress("Delhi");        System.out.println("Value of e :"+ e);        System.out.println("Value of e1:"+ e1);    }}
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

构建器模式可用于:

  • 对用于初始化对象的数据进行一些检查。例如,如果您需要在变量之间进行双重检查

  • 创建不可变对象。一旦初始化就不能更改对象,因此不能使用 setter

  • 添加代码的可读性。

  • 减少用于初始化对象的代码

  • 使实例处于有效状态。在调用所有 setter 之前,使用 setter 对象实例可能处于无效状态。


注意使用构建器创建不可变对象。

当您在多线程环境中工作时,可以在线程之间共享不可变对象,而无需显式同步。因为对象在这段时间内不能改变,所以不可能有竞争条件同时被两个线程访问和修改。


查看完整回答
反对 回复 2022-10-12
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

无需使用任何模式。您甚至可以通过公开变量来避免设置器。然而,

Builder 设计模式的目的是将复杂对象的构造与其表示分离

来源:https ://en.wikipedia.org/wiki/Builder_pattern


查看完整回答
反对 回复 2022-10-12
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

使用构建器模式有几个优点:

  1. 与设置器(使您的类可变)不同,构建器可用于构造不可变对象。在许多情况下,不可变对象比可变对象更受欢迎,因为它们更易于理解和维护,并且它们避免了在多线程环境中锁定的需要。

  2. 构建器可以确保对象即使在构建后直接满足某些不变量。例如,如果您的类有一个name字段不能是null,则构建器可以检查此条件并在不满足时无法构造对象。

您也可以通过使用将所有类内容作为参数的构造函数来完成这两件事,但是当您的类有多个要初始化的字段时,这将是非常不可读的。


查看完整回答
反对 回复 2022-10-12
  • 3 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号