请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

Java建造者设计模式

2023-07-13

Java建造者设计模式

定义

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

对应角色

  • Builder(抽象建造者):它为创建一个产品对象的各个部件指定抽象接口。
  • ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
  • Product(产品角色):它是被构建的复杂对象,包含多个组成部件。
  • Director(指挥者):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

优缺点

优点

  • 封装性好,用户只需知道具体建造者的类型就可以得到所建造的复杂对象,对于产品内部构成的细节不需要了解。
  • 建造者模式将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰。
  • 建造者模式更加关注与零件装配的顺序,使得一步步创建一个复杂对象时更加灵活,细节更容易控制。

缺点

  • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似。如果产品之间的差异性很大,则不适合使用建造者模式。
  • 如果产品内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

应用场景

  • 需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
  • 需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
  • 对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中。
  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

实例

// 产品类
class Computer {
    private String cpu;
    private String ram;
    private String hardDisk;
    private String keyboard;
    private String mouse;

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

    public void setRam(String ram) {
        this.ram = ram;
    }

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }

    public void setKeyboard(String keyboard) {
        this.keyboard = keyboard;
    }

    public void setMouse(String mouse) {
        this.mouse = mouse;
    }

    @Override
    public String toString() {
        return "Computer [cpu=" + cpu + ", ram=" + ram + ", hardDisk=" + hardDisk + ", keyboard=" + keyboard + ", mouse="
                + mouse + "]";
    }
}

// 抽象建造者类
abstract class ComputerBuilder {
    protected Computer computer = new Computer();

    public abstract void buildCpu();

    public abstract void buildRam();

    public abstract void buildHardDisk();

    public abstract void buildKeyboard();

    public abstract void buildMouse();

    public Computer getComputer() {
        return computer;
    }
}

// 具体建造者类
class HighEndComputerBuilder extends ComputerBuilder {

    @Override
    public void buildCpu() {
        computer.setCpu("Intel Core i9");
    }

    @Override
    public void buildRam() {
        computer.setRam("16GB");
    }

    @Override
    public void buildHardDisk() {
        computer.setHardDisk("1TB");
    }

    @Override
    public void buildKeyboard() {
        computer.setKeyboard("Mechanical Keyboard");
    }

    @Override
    public void buildMouse() {
        computer.setMouse("Gaming Mouse");
    }
}

class MidRangeComputerBuilder extends ComputerBuilder {

    @Override
    public void buildCpu() {
        computer.setCpu("Intel Core i5");
    }

    @Override
    public void buildRam() {
        computer.setRam("8GB");
    }

    @Override
    public void buildHardDisk() {
        computer.setHardDisk("512GB");
    }


相关阅读

手机版|MSIPO技术圈 皖ICP备19022944号-2

Copyright © 2024, msipo.com

返回顶部