0
点赞
收藏
分享

微信扫一扫

设计模式 - 创建型模式考点篇:工厂模式、建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你按照步骤创建复杂对象。它将对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。通过使用建造者模式,你可以更加灵活地创建对象,同时还可以隐藏对象的创建细节。

建造者模式通常由以下几个角色组成:

  1. 产品(Product):表示要创建的复杂对象。通常包含多个部分或属性。

  2. 抽象建造者(Builder):定义创建产品的抽象接口,包含创建产品各个部分的抽象方法。

  3. 具体建造者(Concrete Builder):实现抽象建造者接口,完成具体产品的构建过程。具体建造者通常包含一个产品实例,并负责将各个部分组装到产品中。

  4. 指挥者(Director):负责调用建造者的方法来构建产品。指挥者知道构建的具体顺序和步骤。

下面是一个简单的示例,演示了如何使用建造者模式创建一个电脑对象:

// 产品类
class Computer {
    private String cpu;
    private String memory;
    private String storage;
    
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    
    public void setMemory(String memory) {
        this.memory = memory;
    }
    
    public void setStorage(String storage) {
        this.storage = storage;
    }
    
    // 其他属性的getter和setter方法
    
    @Override
    public String toString() {
        return "Computer [cpu=" + cpu + ", memory=" + memory + ", storage=" + storage + "]";
    }
}

// 抽象建造者
interface ComputerBuilder {
    void buildCpu();
    void buildMemory();
    void buildStorage();
    Computer getResult();
}

// 具体建造者
class DesktopBuilder implements ComputerBuilder {
    private Computer computer;
    
    public DesktopBuilder() {
        this.computer = new Computer();
    }
    
    @Override
    public void buildCpu() {
        computer.setCpu("Intel Core i7");
    }
    
    @Override
    public void buildMemory() {
        computer.setMemory("16GB");
    }
    
    @Override
    public void buildStorage() {
        computer.setStorage("1TB HDD");
    }
    
    @Override
    public Computer getResult() {
        return computer;
    }
}

// 指挥者
class Director {
    private ComputerBuilder computerBuilder;
    
    public Director(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }
    
    public void constructComputer() {
        computerBuilder.buildCpu();
        computerBuilder.buildMemory();
        computerBuilder.buildStorage();
    }
}

// 使用示例
public class BuilderPatternExample {
    public static void main(String[] args) {
        ComputerBuilder desktopBuilder = new DesktopBuilder();
        Director director = new Director(desktopBuilder);
        
        director.constructComputer();
        Computer computer = desktopBuilder.getResult();
        
        System.out.println(computer);
    }
}

在上面的示例中,我们定义了一个产品类Computer,它有三个属性:cpu、memory和storage。然后我们定义了一个抽象建造者接口ComputerBuilder,其中包含了创建产品各个部分的抽象方法。接下来,我们实现了具体建造者DesktopBuilder,它负责构建一个具体的Computer对象。最后,我们定义了一个指挥者Director,它知道具体建造者的构建顺序,并负责调用建造者的方法来构建产品。

在主函数中,我们创建了一个具体建造者DesktopBuilder和一个指挥者Director,并将具体建造者传递给指挥者。然后,我们调用指挥者的constructComputer方法来构建产品。最后,我们通过具体建造者的getResult方法获取构建完成的产品,并输出结果。

举报

相关推荐

0 条评论