猿问

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

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);

    }

}


温温酱
浏览 109回答 3
3回答

炎炎设计

构建器模式可用于:对用于初始化对象的数据进行一些检查。例如,如果您需要在变量之间进行双重检查创建不可变对象。一旦初始化就不能更改对象,因此不能使用 setter添加代码的可读性。减少用于初始化对象的代码使实例处于有效状态。在调用所有 setter 之前,使用 setter 对象实例可能处于无效状态。注意使用构建器创建不可变对象。当您在多线程环境中工作时,可以在线程之间共享不可变对象,而无需显式同步。因为对象在这段时间内不能改变,所以不可能有竞争条件同时被两个线程访问和修改。

拉风的咖菲猫

无需使用任何模式。您甚至可以通过公开变量来避免设置器。然而,Builder 设计模式的目的是将复杂对象的构造与其表示分离来源:https ://en.wikipedia.org/wiki/Builder_pattern

慕娘9325324

使用构建器模式有几个优点:与设置器(使您的类可变)不同,构建器可用于构造不可变对象。在许多情况下,不可变对象比可变对象更受欢迎,因为它们更易于理解和维护,并且它们避免了在多线程环境中锁定的需要。构建器可以确保对象即使在构建后直接满足某些不变量。例如,如果您的类有一个name字段不能是null,则构建器可以检查此条件并在不满足时无法构造对象。您也可以通过使用将所有类内容作为参数的构造函数来完成这两件事,但是当您的类有多个要初始化的字段时,这将是非常不可读的。
随时随地看视频慕课网APP

相关分类

Java
我要回答