设计模式-建造者模式

发布时间:2024年01月18日

设计模式-建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它主要用于解决复杂对象的构建问题。在面对一个构造过程复杂、具有多个可选参数或参数之间相互依赖的对象时,通过使用建造者模式可以将构建和表示分离,使得客户端无需知道内部实现细节,只需要指定需要构建产品的类型和内容即可

抽象提取理论

  1. 封装变化
  2. 关注点分离
  3. 延迟绑定
  4. 可扩展性与复用性
  5. 角色抽象

代码结构图

在这里插入图片描述

/**
 * 产品类
 */
public class Product {

    ArrayList<String> parts = new ArrayList<>();

    /**
     * 添加新的产品部件
     */
    public void add(String part){
        parts.add(part);
    }

    /**
     * 列举所有产品部门
     */
    public void show(){
        for (String part : parts) {
            System.out.println(part);
        }
    }

}
/**
 * 抽象建造者
 */
public abstract class Builder {
    /**
     * 建造部件A
     */
    public abstract void buildPartA();

    /**
     * 建造部件B
     */
    public abstract void buildPartB();

    /**
     * 得到产品
     */
    public abstract Product getResult();
}
/**
 * 具体建造者类
 */
public class ConcreteBuilder1 extends Builder{
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.add("部件A");
    }

    @Override
    public void buildPartB() {
        product.add("部件B");
    }

    @Override
    public Product getResult() {
        return product;
    }
}
/**
 * 具体建造者2
 */
public class ConcreteBuilder2 extends Builder{
    private Product product = new Product();
    @Override
    public void buildPartA() {
        product.add("部件X");
    }

    @Override
    public void buildPartB() {
        product.add("部件Y");
    }

    @Override
    public Product getResult() {
        return product;
    }
}
/**
 * 指挥者类
 */
public class Director {
    public void construct(Builder builder){
        builder.buildPartA();
        builder.buildPartB();
    }
}
/**
 * 建造者客户端
 */
public class BuilderDemo {
    public static void main(String[] args) {
        Director director = new Director();
        ConcreteBuilder1 concreteBuilder1 = new ConcreteBuilder1();
        director.construct(concreteBuilder1);
        concreteBuilder1.getResult().show();

        System.out.println("=== === === ===");

        ConcreteBuilder2 concreteBuilder2 = new ConcreteBuilder2();
        director.construct(concreteBuilder2);
        concreteBuilder2.getResult().show();

    }
}


文章来源:https://blog.csdn.net/m0_62649352/article/details/135679002
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。