概念与介绍
定义
建造者模式是指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。
建造者模式属于创建型模式,它使用多个简单的对象一步一步构建成一个复杂的对象,在这一过程中,产品的组成部分是不变的,但每一部分是可以灵活选择的。
应用场景
在开发的过程中,有时我们需要创建一些较为复杂的对象,这个复杂对象由很多部分组成,各个部分因为需求的变更经常产生变动,但是它们的组合过程却相对固定。
应用举例
比如早晨起床的服装搭配:衣服和裤子我们都是要穿的,但是具体穿什么衣服、什么裤子却是可以灵活选择的。
主要优点
1.封装性好,构建和表示分离
2.建造者独立、易扩展
2.建造者可以对创建过程逐步细化,而不对其它模块产生影响,便于控制细节风险
主要缺点
1.产品必须有共同点,限制了其使用范围
2.产品内部发生变化,则建造者也要同步修改。如果产品内部复杂,后期维护成本较大。
结构与实现
模式的结构
模式的实现
import java.util.ArrayList;
//产品:包含多个组成部件的复杂对象
public class Product {
ArrayList<String> parts = new ArrayList<>();
public void addPart(String part) {
parts.add(part);
}
public void show() {
System.out.println(parts.toString());
}
}
//抽象建造者:包含创建产品各个子部件的抽象方法
abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
//返回产品对象
public Product getResult(){
return product;
}
}
//具体建造者1:实现了抽象建造者接口
public class ConcreteBuilder1 extends Builder {
public void buildPartA() {
product.addPart("黑色夹克");
}
public void buildPartB() {
product.addPart("黑色牛仔裤");
}
}
//具体建造者2:实现了抽象建造者接口
public class ConcreteBuilder2 extends Builder {
public void buildPartA() {
product.addPart("紫色羽绒服");
}
public void buildPartB() {
product.addPart("粉色超短裤");
}
}
//指挥者:调用建造者中的方法完成复杂对象的创建
class Director {
//产品构建与组装方法
public Product construct(Builder builder) {
builder.buildPartA();
builder.buildPartB();
return builder.getResult();
}
}
//客户端
public class Client {
public static void main(String[] args) {
Director director = new Director();
Builder builder1 = new ConcreteBuilder1();
Builder builder2 = new ConcreteBuilder2();
//构建产品1
Product product1 = director.construct(builder1);
product1.show();
//构建产品2
Product product2 = director.construct(builder2);
product2.show();
}
}
程序运行结果
[黑色夹克, 黑色牛仔裤]
[紫色羽绒服, 粉色超短裤]