04.(创建型模式)java设计模式之建造者模式

一、什么是建造者模式

  • 使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象,将⼀个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 允许⽤户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节。

二、建造者的实现方式

模式结构分析:

Product(具体产品类):产品⻆⾊。

Builder(抽象建造类):抽象建造者,定义多个通⽤⽅法和构建⽅法。

ConcreteBuilder(具体建造类):具体建造者,可以有多个。

Director(指挥者类):指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象。

类关系图:

统一模型:

代码实现:

查看代码
/*
* 建造者中具体的产品信息
* */
@Data
public class Computer {
    private String memory;
    private String cpu;
    private String mainboard;
    private String disk;
    private String power;
}
/*
* 抽象建造者
* */
public interface IComputerBuilder {
    void buildCpu();
    void buildMainboard();
    void buildDisk();
    void buildPower();
    void buildMemory();
    Computer createComputer();
}
/*
* 具体建造者
* */
public class HighComputerBuilder implements IComputerBuilder{
    Computer computer;
    public  HighComputerBuilder(){
        computer=new Computer();
    }
    @Override
    public void buildCpu() {
     computer.setCpu("这个是高配的CPU……");
    }

    @Override
    public void buildMainboard() {
        computer.setMainboard("这个是高配的主板……");
    }

    @Override
    public void buildDisk() {
        computer.setDisk("这个是高配的硬盘……");
    }

    @Override
    public void buildPower() {
        computer.setPower("这个是高配的电源……");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("这个是高配的内存……");
    }

    @Override
    public Computer createComputer() {
        return computer;
    }
}
/*
 * 具体建造者
 * */
public class LowerComputerBuilder implements IComputerBuilder{
    Computer computer;
    public  LowerComputerBuilder(){
        computer=new Computer();
    }
    @Override
    public void buildCpu() {
        computer.setCpu("这个是低配的CPU……");
    }

    @Override
    public void buildMainboard() {
        computer.setMainboard("这个是低配的主板……");
    }

    @Override
    public void buildDisk() {
        computer.setDisk("这个是低配的硬盘……");
    }

    @Override
    public void buildPower() {
        computer.setPower("这个是低配的电源……");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("这个是低配的内存……");
    }

    @Override
    public Computer createComputer() {
        return computer;
    }
}
/*
* 指挥者,控制整个组合过程,将需求交给建
造者,由建造者去创建对象
* */
public class ComputerDirector {
    public Computer createCompany(IComputerBuilder builder){
        builder.buildMemory();
        builder.buildCpu();
        builder.buildMainboard();
        builder.buildDisk();
        builder.buildPower();
        return builder.createComputer();
    }
}

测试用例:

/*
* 建造者模式的使用场景中的案例
* */
@Test
public void Builder(){
    IComputerBuilder builder=new HighComputerBuilder();
    ComputerDirector director=new ComputerDirector();
    Computer computer=director.createCompany(builder);
    System.out.println(computer.toString());
}

测试结果:

Computer(memory=这个是高配的内存……, cpu=这个是高配的CPU……, mainboard=这个是高配的主板……, disk=这个是高配的硬盘……, power=这个是高配的电源……)

方法评估:

优点:

    • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦。
    • 每⼀个具体建造者都相对独⽴,⽽与其他的具体建造者⽆关,更加精细地控制产品的创建过程。
    • 增加新的具体建造者⽆须修改原有类库的代码,符合开闭原则。
    • 建造者模式结合链式编程来使⽤,代码上更加美观。

缺点:

    • 建造者模式所创建的产品⼀般具有较多的共同点,如果产品差异⼤则不建议使⽤。

三、汇总

建造者模式与抽象⼯⼚模式的⽐较:

建造者模式返回⼀个组装好的完整产品 , 抽象⼯⼚模式返回⼀系列相关的产品,这些产品位于不同的产品等级结构,构成了⼀个产品族。

posted @ 2022-12-06 22:01  冰融心  阅读(41)  评论(0编辑  收藏  举报