建造者模式的简单应用

Builder模式是一种创建型设计模式,用于逐步构建复杂对象。它将构造过程与表示分离,允许相同构造过程创建不同表示。在Java中,Builder模式通过一系列设置方法(如name()、sex()等)构建对象,并通过build()方法返回最终实例。这种模式在参数众多且部分可选时,能提高代码可读性和对象构造灵活性。
摘要由CSDN通过智能技术生成

一、概念

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
类图:
在这里插入图片描述

二、作用

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

三、优、缺点

优点:

  • 多个可变参数

  • 客户端代码可读性非常强

缺点:

  • 增加代码量
  • 构建对象必须先创建它的构造器

四、例子

public class Cat{
    private final String name;       //名称

    private final String sex;       //性别

    private final int age;      //年龄

    private final String breed;  //品种

    private final float weight;  //体重

    private final float height;  //身高

 

 

    private Cat(Builder builder) { //私有构造方法,入参为内部类对象

        name = builder.name;

        sex = builder.sex;

        age = builder.age;

        breed = builder.breed;

        weight = builder.weight;

        height = builder.height;

    }

 

    @Override

    public String toString() {
        return "Dog{" +

                "name='" + name + '\'' +

                ", sex='" + sex + '\'' +

                ", age=" + age +

                ", breed='" + breed + '\'' +

                ", weight=" + weight +

                ", height=" + height +

                '}';

    }

 
    public abstract class BaseBuilder{}
    public static class Builder extends BaseBuilder{
 

        private final String name;       //名称

        private String sex;       //性别

        private int age;      //年龄

        private String breed;  //品种

        private float weight;  //体重

        private float height;  //身高

 

        public Builder(String name) {
            this.name = name;

        }

 

        /**

         * 同名方法,返回this,即builder对象,链式编程

         *

         * @param sex

         * @return

         */

        public Builder sex(String sex) {
            this.sex = sex;

            return this;

        }

 

        public Builder age(int age) {
            this.age = age;

            return this;

        }
 

        public Builder breed(String breed) {
            this.breed = breed;

            return this;

        }

 

        public Builder weight(float weight) {
            this.weight = weight;

            return this;

        }

 

        public Builder height(float height) {
            this.height = height;

            return this;

        }

 

        /**

         * build方法,构造Cat对象,也是一种单例模式的使用方式

         *

         * @return

         */

        public Dog build() {
            return new Dog(this);

        }

    }

}

client部分:

public class Client {
    public static void main(String args[]) {
        Cat cat =new Cat.Builder("Tom").age(12).build();
    }
}

当类具有多个参数,设计这种类时,builder模式就是种不错的选择,特别是当大多数参数都是可选的时候。这样的设计既保证我们的类具有不可变性质,也同时具有良好的可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值