Java设计模式之-构建者模式

构建者模式,又称建造者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。
  构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
  最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,然后将这些部件组装在一起就形成了一台完整的电脑。
  参照如下类图可以比较明显了了解编码如何实现构建者模式:

  在这里插入图片描述
  成员分析:
    Director:控制者类,这是控制整个组合过程,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装;
    Builder:构建者接口,定义各部件生成的方法;
    ConcreteBuilder:具体构建者类:实现Builder构建者接口,具体定义如何生成各个部件;依赖于Product成品类,其中还有获取成品组装结构的方法GetResult()方法;
    Product:成品类

现在我们就以组装台式机为例来进行编码实现:
  Builder:构建接口

package com.ywy.jgs_demo1.dp.builder;

public interface IBuilder {
    void buildCpu();
    void buildMainboard();
    void buildMemory();
    void buildDisk();
    void buildPower();
    Computer getComputer();
}

ComputerBuilder:电脑构建类

package com.ywy.jgs_demo1.dp.builder;

/**
 * ComputerBuilder:电脑构建类
 */
public class ComputerBuilder implements IBuilder {
    
    private Computer computer = new Computer();
    
    @Override
    public void buildCpu() {
        computer.parts.add("intel i9 10代");
    }

    @Override
    public void buildMainboard() {
        computer.parts.add("三星主板");
    }

    @Override
    public void buildMemory() {
        computer.parts.add("金士顿8G内存");
    }

    @Override
    public void buildDisk() {
        computer.parts.add("联想1T硬盘");
    }

    @Override
    public void buildPower() {
        computer.parts.add("10000mAH 大电池");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

Director:组装类

package com.ywy.jgs_demo1.dp.builder;

/**
 * Director:组装类
 */
public class Director {
    public void construct(IBuilder builder){
        builder.buildCpu();
        builder.buildDisk();
        builder.buildMainboard();
        builder.buildMemory();
        builder.buildPower();
    }
}

Computer:成品类

package com.ywy.jgs_demo1.dp.builder;

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

/**
 * Computer:成品类
 */
public class Computer {
    List<String> parts = new ArrayList<>();
    public void show(){
        parts.forEach(System.out::println);
    }
}

Clienter:测试类

    @Test
    void tstBuilder(){
        Director director = new Director();
        ComputerBuilder computerBuilder = new ComputerBuilder();
        director.construct(computerBuilder);
        computerBuilder
                .getComputer()
                .show();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值