【Java设计模式】建造者

本文介绍建造者模式的基本概念,解释其如何将复杂对象的构建与其表示分离,从而实现相同构建过程创建不同表示的目的。通过一个轮滑鞋实例展示建造者模式的实现方式,突出其灵活性与扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:   

    建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式

1. 定义

 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

2. 解决的问题

  • 在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
  • 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, 
    用户使用不同的具体建造者即可得到不同的产品对象。
  • 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
  • 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。

3. 例子

package build.builder;

/**
 * @Author: bufoon
 * @Email: 285395841@qq.com
 * @Datetime: Created In 2018/4/7 11:07
 * @Desc: as follows.
 */
public class Skate {
    /**
     * 轮滑鞋名称
     */
    private String name;
    /**
     * 类型,成人,儿童
     */
    private String type;
    /**
     * 轮子数量
     */
    private Integer wheelAmount;
    /**
     * 颜色
     */
    private String color;
    /**
     * 用途,极限,花式等
     */
    private String use;

    static class SkateBuilder{
        private String name;
        private String type;
        private Integer wheelAmount;
        private String color;
        private String use;

        SkateBuilder name(String name){
            this.name = name;
            return this;
        }

        SkateBuilder type(String type){
            this.type = type;
            return this;
        }

        SkateBuilder wheelAmount(Integer wheelAmount){
            this.wheelAmount = wheelAmount;
            return this;
        }

        SkateBuilder color(String color){
            this.color = color;
            return this;
        }

        SkateBuilder use(String use){
            this.use = use;
            return this;
        }

        Skate build(){
            return new Skate(this.name, this.type, this.wheelAmount, this.color, this.use);
        }

    }

    public Skate(String name, String type, Integer wheelAmount, String color, String use) {
        this.name = name;
        this.type = type;
        this.wheelAmount = wheelAmount;
        this.color = color;
        this.use = use;
    }

    public String getName() {
        return name;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Integer getWheelAmount() {
        return wheelAmount;
    }

    public void setWheelAmount(Integer wheelAmount) {
        this.wheelAmount = wheelAmount;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getUse() {
        return use;
    }

    public void setUse(String use) {
        this.use = use;
    }

    @Override
    public String toString() {
        return "Skate{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", wheelAmount=" + wheelAmount +
                ", color='" + color + '\'' +
                ", use='" + use + '\'' +
                '}';
    }

    public static void main(String[] args) {
        Skate skate = new SkateBuilder().name("HV").type("成人").color("黑色").wheelAmount(8).use("花式刹停").build();
        System.out.println(skate);
    }
}

输出:

Skate{name='HV', type='成人', wheelAmount=8, color='黑色', use='花式刹停'}

4. 思考

建造者模式可以灵活的创建一个自己需要属性的类,自由组合,链式调用,代码可读性强,但是代码量会成倍增长。





### Java建造者设计模式的用法和实现 #### 一、建造者模式简介 建造者模式是一种创建型设计模式,它允许分步骤构建复杂对象。该模式将构造逻辑封装在一个独立的对象中——即“建造者”,而不是由同一个构造函数完成全部工作。这种方式使得代码更加清晰易读,并且易于维护和扩展[^1]。 #### 二、具体实现方式 为了更好地展示如何在Java项目里应用建造者模式,下面给出一个具体的例子来说明其基本原理: 假设有一个`Student`类表示学生信息,通常情况下我们可能会这样定义这个类及其构造器: ```java public class Student { private final String name; private final int age; public Student(String name, int age){ this.name = name; this.age = age; } // Getters... } ``` 然而当属性增多时,上述做法会变得非常繁琐难以管理。此时就可以引入建造者模式来进行优化改进。以下是基于建造者的改版版本: ```java // 定义静态内部类作为Builder static class Builder{ private String name; private int age; // 提供链式调用来设置各个字段的方法 public Builder setName(String value){this.name=value;return this;} public Builder setAge(int value){this.age=value;return this;} // 构建最终的产品实例 public Student build(){ return new Student(this); } } private Student(Builder builder){ this.name=builder.name; this.age=builder.age; } // 静态工厂方法返回一个新的Builder实例 public static Builder builder(){return new Builder();} ``` 现在可以更方便地创建`Student`对象了: ```java @Test public void testBuild_02() { System.out.println("==========工作中常用-建造者模式开始=========="); System.out.println(Student.builder() .setName("第七人格") .setAge(18) .build()); System.out.println("==========工作中常用-建造者模式结束=========="); } ``` 这段测试代码展示了如何利用建造者模式轻松地初始化具有多个参数的学生实体[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值