GoF设计模式(四) - 建造者模式

前言

建造者(Builder)模式,又叫生成器模式。建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。

建造者模式的四个角色
1)Product(产品角色):一个具体的产品对象。【提供产品属性以及set、get方法】
2)Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。【定义成品需要的材料】
3)ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。【提供构建产品的具体材料】
4)Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

【提供构建产品的顺序(封装过程)】

 

例如 生产一台电脑所需要的硬件有主板、CPU、显卡、内存条等等 ,不同品牌都是需要这些硬件集成,例如没有主板电脑是用不了的,只是型号规格出厂商不一致,但总的属性是一样的

1. 产品角色

@Data
public class Computer {
    //cpu
    private String cpu;
    //主板
    private String board;
    //显卡
    private String card;
    //风扇
    private String fan;
    //内存
    private String memory;

}

2. 抽象建造者

public abstract class ComputerBuilder {
    private Computer computer = new Computer();

    /**
     * 构建CPU
     */
    public abstract void buildCpu();
    /**
     * 构建主板
     */
    public abstract void buildBoard();
    /**
     * 构建显卡
     */
    public abstract void buildCard();
    /**
     * 构建风扇
     */
    public abstract void buildFan();
    /**
     * 构建内存
     */
    public abstract void buildMemory();

    /**
     * 当各环节构建完成后就可以出厂了
     */
    public Computer buildComputer(){
        return computer;
    }
}

3. 具体建造者(戴尔电脑)

public class ConcreteDellBuilder extends ComputerBuilder{
    @Override
    public void buildCpu() {
        System.out.println("构建戴尔CPU");
    }

    @Override
    public void buildBoard() {
        System.out.println("构建戴尔主板");
    }

    @Override
    public void buildCard() {
        System.out.println("构建戴尔显卡");
    }

    @Override
    public void buildFan() {
        System.out.println("构建戴尔风扇");
    }

    @Override
    public void buildMemory() {
        System.out.println("构建戴尔内存");
    }
}

4. 具体建造者(MAC)

public class ConcreteMacBuilder extends ComputerBuilder{
    @Override
    public void buildCpu() {
        System.out.println("构建MAC CPU");
    }

    @Override
    public void buildBoard() {
        System.out.println("构建MAC 主板");
    }

    @Override
    public void buildCard() {
        System.out.println("构建MAC 显卡");
    }

    @Override
    public void buildFan() {
        System.out.println("构建MAC 风扇");
    }

    @Override
    public void buildMemory() {
        System.out.println("构建MAC 内存");
    }
}

5. 指挥者

@AllArgsConstructor
@Setter
public class ComputerDirector {
    private ComputerBuilder computerBuilder;

    /**
     * 以怎样的顺序构建ComputerBuilder,交给指挥者方法
     * 动态指定构建流程
     */
    public Computer computerConductor(){
        computerBuilder.buildBoard();
        computerBuilder.buildCard();
        computerBuilder.buildCpu();
        computerBuilder.buildFan();
        computerBuilder.buildMemory();

        return computerBuilder.buildComputer();
    }
}

6. 测试

@SpringBootTest
class BuilderDemoApplicationTests {

	@Test
	void contextLoads() {
		ComputerBuilder computerBuilder = new ConcreteDellBuilder();

		ComputerDirector computerDirector = new ComputerDirector(computerBuilder);
		Computer computer = computerDirector.computerConductor();
	}

}

运行结果

源码: https://download.csdn.net/download/javanbme/17490645

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让程序飞

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值