建造者模式
coderzhouyu
什么是建造者模式?
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象
。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
实现类图
Product(产品类) :我们具体需要生成的类对象 Builder(抽象建造者类):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能 ConcreteBuilder(具体建造者类):实现我们要生成的类对象 Director(导演类):用来固定建造者类,以及调用建造者类的方法来生成我们需要的类对象
建造者模式有哪些用法
建造者模式是将一个复杂的对象的构建与它的表示分离
,使得同样的构建过程可以创建不同的表示。
建造者模式的优缺点
优点
- 建造者独立,易扩展
- 便于控制细节风险
- 建造者模式易于拓展,如果需要增加产品类,只需要增加一个具体的建造者即可
- 建造者模式将产品本身和产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象
缺点
- 产品必须有共同点,范围有限制
- 如果产品之间差异性很大,不适合使用建造者模式,因此其使用范围受到一定的限制
- 如果产品内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大
代码实现
/**
* 产品类
*/
public class Product {
private String partA;
private String partB;
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
}
/**
* 抽象建造者类
*/
public abstract class Builder {
// 设置产品的不同部分,以获得不同的产品
public abstract void setPart();
// 建造产品
public abstract Product buildProduct();
}
/**
* 具体建造者类
*/
public class ConcreteBuilder extends Builder {
private Product product = new Product();
@Override
public void setPart() {
// 产品类内的逻辑处理 这部分逻辑也可以放到导演类中进行处理
}
@Override
public Product buildProduct() {
return product;
}
}
/**
* 导演类
*/
public class Director {
private Builder builder = new ConcreteBuilder();
// 构建不同的产品
public Product getAProduct() {
builder.setPart();
/*
* 设置不同的零件,产生不同的产品
*/
return builder.buildProduct();
}
}
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
Director director = new Director();
Product product = director.getAProduct();
product.showProduct();
}
}