设计模式-建造者模式

核心思想

  • 抽取共同的行为,允许使用者指定复杂对象的类型和内容,不需要了解内部的构建细节
  • 使用多个简单的行为构建一个复杂的对象,将对象的构建过程和它的表示分离,同样的构建过程可以创建不同的表示

优缺点

优点

  • 使用者不需要知道具体内部组成细节,产品本身与创建过程解耦
  • 具体建造者每个都是独立的,相互无关,不同的是控制产品的创建过程
  • 新增具体建造者不需要修改原来类的代码

缺点

  • 建造者所创建的产品一般要具有比较多的共同点,差异大的话不建议使用

代码示例

指挥者代码

java 复制代码
/**
 * 指挥者
 */
public class Director {

    /**
     * 构建对象
     * @param builder
     * @return
     */
    public Computer createComputer(Builder builder){
        builder.buildMemory();
        builder.buildCpu();
        builder.buildMainboard();
        builder.buildDisk();
        builder.buildPower();
        return builder.getComputer();
    }
}

抽象建造者

java 复制代码
/**
 * 建造者的公共方法
 */
public interface Builder {

    /**
     *方法
     */
    void buildCpu();

    void buildMainboard();

    void buildDisk();

    void buildPower();

    void buildMemory();

    Computer getComputer();
}

具体建造者

java 复制代码
public class HighComputerBuilder implements Builder{

    private Computer 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 getComputer() {
        return computer;
    }
}
java 复制代码
public class LowComputerBuilder implements Builder{

    private Computer 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 getComputer() {
        return computer;
    }
}

产品

java 复制代码
public class Computer {

    private String cpu;

    private String memory;

    private String mainboard;

    private String disk;

    private String power;

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getMainboard() {
        return mainboard;
    }

    public void setMainboard(String mainboard) {
        this.mainboard = mainboard;
    }

    public String getDisk() {
        return disk;
    }

    public void setDisk(String disk) {
        this.disk = disk;
    }

    public String getPower() {
        return power;
    }

    public void setPower(String power) {
        this.power = power;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", mainboard='" + mainboard + '\'' +
                ", disk='" + disk + '\'' +
                ", power='" + power + '\'' +
                '}';
    }
}

测试

java 复制代码
public class AppRun {
    public static void main(String[] args) {

        Director director = new Director();
        Computer computer = director.createComputer(new HighComputerBuilder());
        System.out.println(computer);

    }
}
java 复制代码
public class AppRun {
    public static void main(String[] args) {

        Director director = new Director();
        Computer computer = director.createComputer(new LowComputerBuilder());
        System.out.println(computer);

    }
}
相关推荐
七月丶2 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞2 小时前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼3 小时前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
静水流深_沧海一粟19 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder19 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室1 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦2 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo5 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4965 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃5 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式