关于建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是他们组合在一起的算法却相当稳定。
注意:
1.在一些基本部件不会变,而其组合经常变化的时候使用。
2.通常将变与不变分离开。
3.建造者:创建和提供实例,导演:管理创造出来的实例的依赖关系。
4.与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
建造者模式优点:
1.建造者独立,易于扩展
2.便于控制细节风险
建造者模式缺点:
产品必须有共同点,范围有限制;如内部变化复杂,会有很多的创建者
使用场合:
1.需要生成的对象具有复杂的内部结构。
2.、需要生成的对象内部属性本身相互依赖。
建造者模式目的就是分离对象的属性与创建过程,具体讲就是对象中属性多,但是通常重要的只有几个,因此建造者模式会让开发者指定一些比较重要的属性或者让开发者指定某几个对象类型,然后让建造者去实现复杂的构建对象的过程,这就是对象的属性与创建分离。
建造者模式的简单实例
大家知道一辆车是很复杂的,有发动机、变速器、轮胎、挡风玻璃、雨刮器、气缸、方向盘等等无数的部件。
用户买车的时候不可能一个一个去指定我要那种类型的变速器、我要一个多大的轮胎、我需要长宽高多少的车,这是不现实的
通常用户只会和销售谈我需要什么什么样的类型的车,马力要不要强劲、空间是否宽敞,这样销售就会根据用户的需要去推荐一款具体的车
这就是一个典型建造者的场景:车是复杂对象,销售是建造者。我告诉建造者我需要什么,建造者根据我的需求给我一个具体的对象
public class Car {
// 尺寸
private String size;
// 方向盘
private String steeringWheel;
// 底座
private String pedestal;
// 轮胎
private String wheel;
// 排量
private String displacement;
// 最大速度
private String maxSpeed;
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getSteeringWheel() {
return steeringWheel;
}
public void setSteeringWheel(String steeringWheel) {
this.steeringWheel = steeringWheel;
}
public String getPedestal() {
return pedestal;
}
public void setPedestal(String pedestal) {
this.pedestal = pedestal;
}
public String getWheel() {
return wheel;
}
public void setWheel(String wheel) {
this.wheel = wheel;
}
public String getDisplacement() {
return displacement;
}
public void setDisplacement(String displacement) {
this.displacement = displacement;
}
public String getMaxSpeed() {
return maxSpeed;