【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(二)

简介: 【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(二)

4、教师类 ( 非必须 )


package builder;
/**
 * 教师类 , 负责使用建造者创建学生信息
 */
public class Teacher {
    /**
     * 持有学生建造者
     */
    private StudentBuilder studentBuilder;
    /**
     * 构造函数注入建造者
     * @param studentBuilder
     */
    public Teacher(StudentBuilder studentBuilder) {
        this.studentBuilder = studentBuilder;
    }
    /**
     * 调用建造者对象创建 学生 实例对象
     * @param name
     * @param age
     * @param number
     * @param address
     * @param school
     * @return
     */
    public Student makeStudent(String name, String age,
                               String number, String address,
                               String school) {
        this.studentBuilder.buildName(name);
        this.studentBuilder.buildAge(age);
        this.studentBuilder.buildNumber(number);
        this.studentBuilder.buildAddress(address);
        this.studentBuilder.buildSchool(school);
        return this.studentBuilder.makeCourse();
    }
}



5、测试类


package builder;


public class Main {
    public static void main(String[] args) {
        // 创建学生对象建造者
        StudentBuilder studentBuilder = new StudentBuilderImpl();
        // 创建教师对象
        Teacher teacher = new Teacher(studentBuilder);
        // 教师对象使用学生建造者创建学生 实例对象
        Student student = teacher.makeStudent(
                "小明",
                "12" ,
                "1",
                "学院路",
                "第一小学");
        System.out.println(student);
    }
}


执行结果 :


Student{name='小明', age='12', number='1', address='学院路', school='第一小学'}








六、实例类和建造者类定义在同一个类中 ( 建造者模式常用用法 )



1、实例类 + 建造者类


package builder2;


/**
 * 学生类
 */
public class Student {
    private String name;
    private String age;
    private String number;
    private String address;
    private String school;
    public Student(StudentBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.number = builder.number;
        this.address = builder.address;
        this.school = builder.school;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", number='" + number + '\'' +
                ", address='" + address + '\'' +
                ", school='" + school + '\'' +
                '}';
    }
    /**
     * 使用静态内部类作为创建者
     *      将具体的业务类 及其 创建者 定义在一个类中
     * 使用链式调用 , 每个 build 步骤都返回创建者本身
     */
    public static class StudentBuilder {
        private String name;
        private String age;
        private String number;
        private String address;
        private String school;
        public StudentBuilder buildName(String name) {
            this.name = name;
            return this;
        }
        public StudentBuilder buildAge(String age) {
            this.age = age;
            return this;
        }
        public StudentBuilder buildNumber(String number) {
            this.number = number;
            return this;
        }
        public StudentBuilder buildAddress(String address) {
            this.address = address;
            return this;
        }
        public StudentBuilder buildSchool(String school) {
            this.school = school;
            return this;
        }
        public Student build() {
            return new Student(this);
        }
    }
}



2、测试类


package builder2;
public class Main {
    public static void main(String[] args) {
        // 使用链式调用 , 一行代码创建实例对象
        Student student = new Student.StudentBuilder()
                .buildName("小明")
                .buildAge("12")
                .buildNumber("1")
                .buildAddress("学院路")
                .buildSchool("第一小学")
                .build();
        System.out.println(student);
    }
}


执行结果 :


Student{name='小明', age='12', number='1', address='学院路', school='第一小学'}

image.png


目录
相关文章
|
4天前
|
设计模式 Java
【设计模式系列笔记】建造者模式
建造者模式是一种创建型设计模式,用于将复杂对象的构建与其表示分离,使构建过程可定制。关键元素包括产品类(定义要构建的对象)、建造者接口(定义构建方法)、具体建造者类(实现构建过程)和指导者类(负责构建过程)。通过建造者模式,客户端可以灵活地创建具有不同表示的复杂对象,提高代码的可读性和可维护性,尤其适用于构建过程复杂且包含多个可选部分的情况。
108 1
|
4天前
|
设计模式 uml
【设计模式】建造者模式就是游戏模式吗?
【设计模式】建造者模式就是游戏模式吗?
11 0
|
4天前
|
设计模式 uml
大话设计模式(3)——造物者一般的建造者模式
大话设计模式(3)——造物者一般的建造者模式
8 1
大话设计模式(3)——造物者一般的建造者模式
|
4天前
|
设计模式 前端开发 API
写出易维护的代码|React开发的设计模式及原则
本文对React社区里出现过的一些设计模式进行了介绍,并讲解了他们遵循的设计原则。
|
4天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
26 4
|
4天前
|
设计模式 JavaScript 前端开发
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
|
4天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
4天前
|
设计模式 测试技术 Go
[设计模式 Go实现] 创建型~建造者模式
[设计模式 Go实现] 创建型~建造者模式
|
4天前
|
设计模式 Java
小谈设计模式(14)—建造者模式
小谈设计模式(14)—建造者模式
|
4天前
|
设计模式 算法 Java
23种设计模式,访问者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】访问者模式是一种将算法与对象结构分离的设计模式。这种模式主要用于执行一个操作(或一组操作)在一个对象结构的各元素上,它可以在不修改各元素的类的前提下定义新的操作。
21 2