【设计模式】建造者模式

本文介绍并演示了建造者模式如何通过Director类指导ConcreteBuilder创建Product对象,实现了产品对象的独立于具体部件的创建方式。涉及抽象Builder接口、具体Builder实现及测试实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类图

在这里插入图片描述

工程目录

在这里插入图片描述

代码

Product.java

package com.company.pattern.demo09;

import java.util.ArrayList;
import java.util.List;

/**
 * 产品类
 * @author blazar
 */
public class Product {
    List<String> parts = new ArrayList<>();

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

    /**
     * 列举出所有的产品部件
     */
    public void show(){
        System.out.println("产品部件:");
        for(String x : parts){
            System.out.println(x);
        }
    }
}

AbstractBuilder.java

package com.company.pattern.demo09;

/**
 * 抽象的建造者类
 * @author blazar
 */
public abstract class AbstractBuilder {
    /**
     * 建造A部分
     */
    public abstract void buildPartA();
    /**
     * 建造B部分
     */
    public abstract void buildPartB();

    /**
     * 获得建造完成的产品类
     * @return
     */
    public abstract Product getResult();
}

ConcreteBuilder1.java

package com.company.pattern.demo09;

/**
 * @author blazar
 */
public class ConcreteBuilder1 extends AbstractBuilder{
    private Product product = new Product();

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

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

    @Override
    public Product getResult() {
        return product;
    }
}

ConcreteBuilder2.java

package com.company.pattern.demo09;

/**
 * @author blazar
 */
public class ConcreteBuilder2 extends AbstractBuilder{
    private Product product = new Product();

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

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

    @Override
    public Product getResult() {
        return product;
    }
}

Director.java

package com.company.pattern.demo09;

/**
 * 指挥者类
 * 用来指挥建造过程
 * @author blazar
 */
public class Director {
    public void construct(AbstractBuilder abstractBuilder){
        abstractBuilder.buildPartA();
        abstractBuilder.buildPartB();
    }
}

测试类 Main.java

package com.company.pattern.demo09;

/**
 * 测试类
 * @author blazar
 */
public class Main {
    public static void main(String[] args) {
        Director director = new Director();
        AbstractBuilder abstractBuilder1 = new ConcreteBuilder1();
        AbstractBuilder abstractBuilder2 = new ConcreteBuilder2();

        /**
         * 指挥者用ConcreteBuilder1的方法来建造产品
         */
        director.construct(abstractBuilder1);
        Product product = abstractBuilder1.getResult();
        product.show();
    }
}

总结

建造者模式使得创建一个复杂对象的算法独立于组成这个对象各个部分的实现和这些不同部分的装配方式;

参考《大话设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值