首页 > 其他分享 >建造者模式

建造者模式

时间:2024-09-17 15:03:14浏览次数:7  
标签:String 对象 建造 模式 Computer private keyboard public

建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它用于分步骤地创建复杂对象,而无需直接调用构造函数。通过将对象的构建过程与其表示(即对象内部细节的实现)分离,建造者模式允许创建不同的对象表示,同时保持构造过程的一致性。

特点

  • 分步骤创建:建造者模式将对象的创建过程分解为多个步骤,允许逐步设置对象的各个部分(例如,属性或组件)。
  • 可读性:由于每一步都明确设置某个属性,建造者模式使得代码更加清晰,便于理解和维护。
  • 可变性:同样的构造过程可以用于创建不同类型或不同配置的对象,满足多样化需求。
  • 封装性:构建过程和最终产品的实现细节被隐藏,使用者不需要关心对象的创建细节,只需按照步骤进行配置。

原理

建造者模式通常涉及以下几个组件:

  • Builder(建造者):提供用于构建对象不同部分的方法,通常采用链式调用,允许设置对象的属性或组件。
  • Concrete Builder(具体建造者):实现 Builder 接口,提供具体的步骤来构建对象的各个部分。
  • Product(产品):最终构建的复杂对象,它由多个部分组成。
  • Director(指导者,可选):负责管理构建过程的顺序,调用 Builder 的方法一步步创建对象。

实现

//产品
public class Computer {
    private String CPU;
    private String GPU;
    private int RAM;
    private int storage;
    private PeripheralDevice peripheralDevice;
    private Computer(){}
    @Override
    public String toString() {
        return "Computer " +
                "[CPU=" + CPU
                + ", GPU=" + GPU
                + ", RAM=" + RAM
                + "GB, storage=" + storage + "GB]"
                + " -- "
                + "PeripheralDevice [" + ((peripheralDevice==null)?"null":peripheralDevice.toString())
                + "]";
    }
    
    //建造者类
    public static class ComputerBuilder {
        Computer c=new Computer();
        public ComputerBuilder setCPU(String CPU) {
            c.CPU = CPU;
            return this;
        }

        public ComputerBuilder setGPU(String GPU) {
            c.GPU = GPU;
            return this;
        }

        public ComputerBuilder setRAM(int RAM) {
            c.RAM = RAM;
            return this;
        }

        public ComputerBuilder setStorage(int storage) {
            c.storage = storage;
            return this;
        }
        //添加外设
        public ComputerBuilder setPeripheralDevice(String indicator,String mouse,String keyboard){
            c.peripheralDevice=new PeripheralDevice(indicator,mouse,keyboard);
            return this;
        }
        public Computer build() {
            return c;
        }
    }
}
//在不改变computer类的情况下添加外设类,也算产品类
class PeripheralDevice{
    private String indicator;
    private String mouse;
    private String keyboard;
//    public PeripheralDevice(){}
    public PeripheralDevice(String indicator, String mouse, String keyboard){
        this.indicator=indicator;
        this.mouse=mouse;
        this.keyboard=keyboard;
    }
    @Override
    public String toString() {
        return "PeripheralDevice{" +
                "indicator='" + indicator + '\'' +
                ", mouse='" + mouse + '\'' +
                ", keyboard='" + keyboard + '\'' +
                '}';
    }
}
//test
//建造者模式 (Builder)
public class TestBuilder {
    public static void main(String[] args) {
        Computer gamingPC = new Computer.ComputerBuilder()
                .setCPU("Intel Core i9")
                .setGPU("NVIDIA RTX 3080")
                .setRAM(32)
                .setStorage(1024)
                .build();

        Computer officePC = new Computer.ComputerBuilder()
                .setCPU("Intel Core i5")
                .setGPU("Integrated Graphics")
                .setRAM(16)
                .setStorage(512)
                .setPeripheralDevice("leisheng","leisheng","leisheng")
                .build();
        System.out.println(gamingPC);
        System.out.println(officePC);

    }
}

优缺点

优点

  • 简化复杂对象的创建:通过分步骤创建,避免了庞大的构造函数,提升了代码的可读性。
  • 灵活性:支持多种不同配置的对象创建,适应不同需求。
  • 易于扩展:可以轻松添加新的构建步骤或不同类型的产品,而不影响现有代码。

缺点

  • 过度设计的风险:如果对象不够复杂,使用建造者模式可能显得过于繁琐。
  • 额外代码:需要编写更多的类和方法,可能会增加代码量。

适用场景

  • 对象构造过程复杂且包含多个步骤。
  • 需要创建的对象具有不同的表示或配置。
  • 需要确保对象的创建过程是可控且逐步进行的。

总结

建造者模式特别适合需要灵活构造过程的复杂对象,如配置复杂的电脑、创建具有多个可选参数的类实例等。

标签:String,对象,建造,模式,Computer,private,keyboard,public
From: https://www.cnblogs.com/20lxj666/p/18384742

相关文章

  • 抽象工厂模式
    抽象工厂模式抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式常用于需要创建一组相关或依赖对象的场景,确保这些对象在不同的环境中可以协同工作。特点抽象工厂:定义了一组创......
  • 享元模式
    享元模式(FlyweightPattern)是一种结构型设计模式,旨在通过共享大量细粒度对象来减少内存使用。它在需要创建大量相似对象的场景中尤其有用,通过共享对象来降低内存开销,从而提高性能。核心思想享元模式将对象的状态分为两部分:内部状态(IntrinsicState):不随外部环境改变,可以共享的......
  • 外观模式
    外观模式外观模式(FacadePattern)是一种结构型设计模式,旨在为复杂的子系统提供一个简单的接口。它的核心思想是将系统的复杂性封装在一个统一的接口中,使得外部代码可以通过这个接口简化对复杂系统的操作。主要组成部分外观类(FacadeClass):提供一个简化的接口来访问复杂的子系统......
  • 装饰者模式
    装饰者模式装饰者模式(DecoratorPattern)是一种结构型设计模式,主要用于动态地给对象添加额外的功能,而不改变其结构。这个模式通过创建一个装饰类来包装原始对象,从而扩展其功能。主要角色组件(Component):定义一个接口或抽象类,声明可以被装饰的对象所共有的接口。具体组件(Concrete......
  • 组合模式
    组合模式组合模式(CompositePattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。它允许客户端以统一的方式处理单个对象和对象集合,使得客户端不需要区分具体的对象类型,从而简化了代码的处理逻辑。主要组成部分Component(组件):定义了叶子对象和......
  • 桥接模式
    桥接模式桥接模式(BridgePattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,从而使它们可以独立地变化。这个模式的主要目的是解耦抽象和实现,使得它们可以独立地变化和扩展。主要概念抽象(Abstraction):这是一个接口或抽象类,它定义了高层次的操作。修正抽象(RefinedA......
  • 【加密算法基础——AES CBC模式代码解密实践】
    AES解密实践之代码实现AES解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。实际测试了一下,CBC模式,对于key截断的问题可以解决,但是CFB模式,目前还无法实验......
  • 设计模式---- 门面模式
    门面模式门面模式(FacadePattern)是一种结构型设计模式,用于为复杂子系统提供一个统一、简单的接口,隐藏系统的复杂性。通过门面模式,客户端无需直接与系统的内部组件交互,而是通过门面类与系统打交道,简化了客户端的使用,降低了系统的复杂性和耦合度。门面模式的主要概念定义:门面模......
  • 攻防世界 ————新手模式适合作为桌面 misc
    (本篇文章参考大佬的解题)下载附件,得到rar的的压缩包,解压缩,打开文件后有一张图片:打开图片发现什么也没有:使用软件Stegsolve打开图片看有什么问题:点击下一页:点击后发现有一个二维码:把他保存下来,使用软件扫码看看里面有什么:(我是用微信扫码的)出现了十六进制的数字:把他复......
  • 设计模式---- 工厂模式
    工厂模式工厂模式是一种创建型设计模式,它的主要目的是将对象的创建过程与对象的使用过程分离。工厂模式通过引入工厂类或者工厂方法,隐藏对象创建的复杂性,使得代码更加灵活、可扩展。工厂模式的使用场景主要在于:当我们需要对创建的对象进行封装或延迟创建时,工厂模式是一个很好的选......