0
点赞
收藏
分享

微信扫一扫

设计模式之—建造者模式

李雨喵 2022-03-12 阅读 120

建造者模式

参考1-菜鸟教程

参考2-路飞

1.概述

建造者模式(Builder Pattern), 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

意图:将一个复杂的构建与其分离,使得同样的构建过程可以创建不同的表示。

主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相当稳定。

何时使用: 一些基本部件不会变,而其组合经常变化的时候。

如何解决: 将变与不变分离开。

关键代码: 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

  • Builder:抽象建造者,定义多个通用方法和构建方法
  • ConcreteBuilder:具体建造者,可以有多个
  • Director:指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象
  • Product:产品角色

通过图再来理解下

在这里插入图片描述

2.代码实现

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Computer {

        /*
         * 这里为了方便,都使用String类型,实际上应该大部分是自定义类型
         * */

         private String cpu;

         private String memory;

         private String mainboard;
}
public interface Builder {

         void buildCpu();

         void buildMemory();

         void buildMainBoard();

         Computer createComputer();
}

这里为了方便,只写一个实现类。

public class HighComputerBuilder implements Builder {

    private Computer computer = new Computer();

    @Override
    public void buildCpu() {
        computer.setCpu("高配 Cpu");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("高配 内存");
    }

    @Override
    public void buildMainBoard() {
         computer.setMainboard("高配 主板");
    }

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

public class Director {

        public Computer build(Builder builder){
                 builder.buildCpu();
                 builder.buildMainBoard();
                 builder.buildMemory();
                 return builder.createComputer();
        }
}

public class Main {

    public static void main(String[] args) {
        Director director = new Director();
        Computer computer = director.build(new HighComputerBuilder());
        System.out.println(computer);
    }
}

/*
Computer(cpu=高配 Cpu, memory=高配 内存, mainboard=高配 主板)
*/

3.小结

参考

举报

相关推荐

0 条评论