创建型模式之 Builder (生成器)
摘要:
本文介绍了生成器(Builder)设计模式,属于创建型模式之一。该模式通过将复杂对象的构建与表示分离,使同一构建过程能创建不同表现形式。文章以小米汽车不同配置版本为例说明了模式意图,并提供了Java代码实现示例,展示了如何通过Director管理Builder来构建不同的Product。核心包括抽象Builder类、具体Builder实现类以及最终产品类,实现了通过相同构建过程生成不同配置产品的目标。
前言:
23种设计模式,分为创建型、结构型、行为型
创建型模式:1.简单工厂【不属于23种设计模式 次写法为了引入工厂方法和抽象工厂】 -> 2.工厂方法【属于类】-> 3.抽象工厂 -> 4.生成器 -> 5.原型 -> 6.单例
生成器设计模式:用自己话理解,使用同样的构造器可以创建不同表示结果,比如买小米汽车,su7 有基础版 前驱、加强版 后驱 、max版 实时四驱,同样是汽车,选择配置不同。
意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
代码
import java.util.ArrayList;
import java.util.List;
/**
* Builder 生成器模式
*/
public class BuilderDemo {
public static void main(String[] args) {
// 1.创建管理员
Director director1 = new Director();
// 2.管理员构建不同的构造器
Builder1 builder1 = new Builder1();
director1.construct(builder1);
Product product1 = builder1.getResult();
// 3.展示
product1.show();
System.out.println("----------------------------");
Director director2 = new Director();
Builder2 builder2 = new Builder2();
director2.construct(builder2);
Product product2 = builder2.getResult();
product2.show();
}
}
/**
* 管理者
*/
class Director{
public void construct(Builder builder){
builder.buildPart();
}
}
abstract class Builder{
/**
* 构建组件
*/
public abstract void buildPart();
/**
* 获取组件
* @return 组件
*/
public abstract Product getResult();
}
/**
*构建组件2
*/
class Builder2 extends Builder{
Product product = new Product();
@Override
public void buildPart() {
product.add("a");
product.add("b");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 构建组件1
*/
class Builder1 extends Builder{
Product product = new Product();
@Override
public void buildPart() {
product.add("a");
product.add("b");
product.add("c");
product.add("d");
product.add("e");
}
@Override
public Product getResult() {
return product;
}
}
class Product{
List<String> parts = new ArrayList<>();
/**
* 添加产品组件
* @param part 组件
*/
public void add(String part){
parts.add(part);
}
/**
* 展示组件
*/
public void show(){
parts.forEach(System.out::println);
}
}
喜欢我的文章记得点个在看,或者点赞,持续更新中ing…