Java设计模式之-建造者模式
什么是建造者模式
建造者模式(Builder Pattern)是一种对象构建设计模式,它可以将一个复杂对象的构建逻辑与其表示分离,使得同样的构建过程可以创建不同的表示。该模式是为了将构造复杂对象的过程和它的部件解耦。
主要解决什么问题
建造者模式主要解决了在软件系统中,有时存在着复杂对象的创建工作,其通常由多个部分的组装和步骤组成。与其他创建型模式相比,建造者模式更注重一步步创建复杂对象的过程。
在什么时候我们需要使用建造者模式
当我们需要创建的对象非常复杂,包含多个组成部分,并且对象的创建需要一系列的步骤时,我们通常会选择使用建造者模式。
生活中的应用实例
一个很好的例子是在吃快餐时,我们通常会选择一个套餐,这个套餐包含汉堡、薯条和饮料。尽管每个部分的制作过程可能有所不同,但是我们不必关心这些细节,只需要选择我们想要的套餐类型即可。
优点
客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
每一个具体建造者都相对独立,可以很方便地替换或增加新的建造者,用户使用不同的具体建造者即可得到不同的产品对象。
缺点
建造者模式所创建的产品一般有较多的共同点,其组成部分相似,如果产品之间的差异性很大,例如不同的部件,建造者模式可能无法满足需求。
使用场景
建造者模式通常在以下场景中使用:
需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个部分。
需要生成的产品对象的属性相互依赖,建造者模式可以强制进行一步步的构造过程,不允许跳过必要的步骤。
代码举例
java
Copy
public class Burger {
private String size;
private boolean cheese;
private boolean pepperoni;
private boolean lettuce;
private boolean tomato;
public Burger(BurgerBuilder builder) {
this.size = builder.size;
this.cheese = builder.cheese;
this.pepperoni = builder.pepperoni;
this.lettuce = builder.lettuce;
this.tomato = builder.tomato;
}
// getters and toString()...
}
public class BurgerBuilder {
public String size;
public boolean cheese = false;
public boolean pepperoni = false;
public boolean lettuce = false;
public boolean tomato = false;
public BurgerBuilder(String size) {
this.size = size;
}
public BurgerBuilder addCheese() {
this.cheese = true;
return this;
}
public BurgerBuilder addPepperoni() {
this.pepperoni = true;
return this;
}
public BurgerBuilder addLettuce() {
this.lettuce = true;
return this;
}
public BurgerBuilder addTomato() {
this.tomato = true;
return this;
}
public Burger build() {
return new Burger(this);
}
}
public class Main {
public static void main(String[] args) {
Burger burger = new BurgerBuilder("Large")
.addPepperoni()
.addLettuce()
.addTomato()
.build();
System.out.println(burger);
}
}
在这个例子中,BurgerBuilder 就是一个建造者,它负责创建 `
Burger对象。通过链式调用方法,我们可以自由地添加我们想要的组件(例如,addPepperoni()、addLettuce()、addTomato()),然后调用 build() 方法就可以得到一个 Burger 对象。
这样做的好处是,我们可以控制 Burger 对象的创建过程,同时不暴露其内部的构建细节。此外,如果我们想要创建一个稍微不同的 Burger,只需要更改一下构建步骤即可。