Java设计模式之建造者模式(Builder模式)

Java设计模式之建造者模式(Builder模式)

Builder模式是用于构建复杂对象的一种模式。是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用Builder模式来替代多参数构造函数是一个比较好的实践法则。

场景

车分很多种如:

  • 汽车:名字,价格,有发动机,有棚子
  • 电动三轮车:名字,价格,有棚子
  • 自行车:名字,价格,不堵车

其实为每个车写一个构造函数也可以实现,但是当车子多了,就不便于维护了。创建者模式就是解决这一类问题

应用举例

定义一个多功能的车

/**
 * Created by yunzhao.liu on 2017/12/27
 */

public class Car {

    private String name;//名字
    private int price;//价格
    private boolean isTrafficjam;//堵车
    private boolean isHaveEngine;//发动机
    private boolean isHaveShed;//棚子

    public static class Builder {
        private String name;//名字
        private int price;//价格
        private boolean isTrafficjam;//堵车
        private boolean isHaveEngine;//发动机
        private boolean isHaveShed;//棚子

        // 构建的步骤
        public Builder() {
        }

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

        public Builder setPrice(int price) {
            this.price = price;
            return this;
        }

        public Builder setTrafficjam(boolean trafficjam) {
            isTrafficjam = trafficjam;
            return this;
        }

        public Builder setHaveEngine(boolean haveEngine) {
            isHaveEngine = haveEngine;
            return this;
        }

        public Builder setHaveShed(boolean haveShed) {
            isHaveShed = haveShed;
            return this;
        }

        public Car build() { // 构建,返回一个新对象
            return new Car(this);
        }
    }

    private Car(Builder b) {
        name = b.name;
        price = b.price;
        isTrafficjam = b.isTrafficjam;
        isHaveEngine = b.isHaveEngine;
        isHaveShed = b.isHaveShed;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", isTrafficjam=" + isTrafficjam +
                ", isHaveEngine=" + isHaveEngine +
                ", isHaveShed=" + isHaveShed +
                '}';
    }
}

测试类

/**
 * Created by yunzhao.liu on 2017/12/27
 * 测试类
 */

public class TestBuilder {

    public static void main(String[] args) {
        //奥迪A6
        Car aodi = new Car.Builder()
                .setName("奥迪A6")
                .setPrice(200000)
                .setTrafficjam(true)
                .setHaveEngine(true)
                .setHaveShed(true)
                .build();
        String s1 = aodi.toString();
        System.out.println(s1);
        //三轮车
        Car tricycle = new Car.Builder()
                .setName("三轮车")
                .setPrice(2500)
                .setHaveEngine(true)
                .setHaveShed(true)
                .build();
        String s2 = tricycle.toString();
        System.out.println(s2);

        //自行车
        Car bicycle = new Car.Builder()
                .setName("自行车")
                .setPrice(300)
                .setTrafficjam(false)
                .build();

        String s3 = bicycle.toString();
        System.out.println(s3);
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值