【Java设计模式】建造者

简介:   

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

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. 思考

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





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以参考以下代码: ``` public class Car { private String make; private String model; private int year; private String color; public static class Builder { private String make; private String model; private int year; private String color; public Builder(String make, String model, int year) { this.make = make; this.model = model; this.year = year; } public Builder setColor(String color) { this.color = color; return this; } public Car build() { Car car = new Car(); car.make = this.make; car.model = this.model; car.year = this.year; car.color = this.color; return car; } } private Car() { } @Override public String toString() { return year + " " + make + " " + model + " (" + color + ")"; } } ``` 在这个范例,我们定义了一个 `Car` 类,该类包含了一些基本的属性,例如制造商、型号、年份和颜色。我们使用了建造者模式来构造 `Car` 对象,其 `Builder` 类包含了与 `Car` 相同的属性。我们在 `Builder` 为颜色属性提供了一个 setter 方法,这样我们可以更轻松地设置颜色。最后,我们定义了一个 `Car` 的私有构造函数,该构造函数只能从 `Builder` 创建,以确保只有 `Builder` 可以正确构造 `Car` 对象。 使用建造者模式的好处是,它提供了更好的可读性和可维护性,因为我们可以将对象的构建过程拆分成多个步骤,并根据需要添加或修改这些步骤。此外,建造者模式还可以保证创建的对象是不可变的,从而提高了应用程序的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值