您的位置:首页 > 产品设计 > UI/UE

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

2018-01-05 22:26 603 查看

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);
}
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息