建造者模式

建造者模式

建造者模式(Builder Pattern)允许你逐步构建复杂的对象。这种模式将对象的构造过程与其表示分离,使得相同的构造过程可以创建不同的表示。建造者模式特别适用于需要创建具有多个部件或复杂配置的对象时。

使用建造者模式构造对象并完成链式调用:

需要创建的对象:

java 复制代码
@Data
@ToString
public class Phone {
    String cpu;
    String mem;
    String disk;
    String camera;
}

抽象建造者类及其实现子类:

java 复制代码
public abstract class AbstractPhoneBuilder {
    Phone phone;
    public abstract AbstractPhoneBuilder customCpu(String cpu);
    public abstract AbstractPhoneBuilder customMem(String mem);
    public abstract AbstractPhoneBuilder customDisk(String disk);
    public abstract AbstractPhoneBuilder customCamera(String camera);
    public Phone getPhone(){
        return this.phone;
    }
}
java 复制代码
public class PhoneBuilder extends AbstractPhoneBuilder{
    public PhoneBuilder() {
        this.phone = new Phone();
    }

    @Override
    public AbstractPhoneBuilder customCpu(String cpu) {
        phone.setCpu(cpu);
        return this;
    }

    @Override
    public AbstractPhoneBuilder customMem(String mem) {
        phone.setMem(mem);
        return this;
    }

    @Override
    public AbstractPhoneBuilder customDisk(String disk) {
        phone.setDisk(disk);
        return this;
    }

    @Override
    public AbstractPhoneBuilder customCamera(String camera) {
        phone.setCamera(camera);
        return this;
    }
}

测试:

java 复制代码
public class Main {
    public static void main(String[] args) {
        PhoneBuilder builder = new PhoneBuilder();
        Phone phone = builder.customCpu("晓龙999")
                .customMem("32g")
                .customDisk("1tb")
                .customCamera("1亿")
                .getPhone();
        System.out.println(phone);
    }
}
相关推荐
new_daimond12 分钟前
设计模式-装饰器模式详解
设计模式·装饰器模式
码猿宝宝20 分钟前
浏览器中javascript时间线,从加载到执行
开发语言·javascript·ecmascript
OEC小胖胖22 分钟前
App Router vs. Pages Router:我应该如何选择?
开发语言·前端·前端框架·web·next.js
虫小宝41 分钟前
淘宝客app的API网关设计:认证授权与流量控制策略
java·分布式·架构
max50060044 分钟前
OpenSTL PredRNNv2 模型复现与自定义数据集训练
开发语言·人工智能·python·深度学习·算法
Pocker_Spades_A1 小时前
Python快速入门专业版(二十八):函数参数进阶:默认参数与可变参数(*args/**kwargs)
开发语言·python
努力努力再努力wz1 小时前
【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)
java·linux·运维·开发语言·c++
Cloud Traveler2 小时前
8.FC平台模块梳理
java·linux·开发语言
歪歪1002 小时前
webpack 配置文件中 mode 有哪些模式?
开发语言·前端·javascript·webpack·前端框架·node.js
0_0梅伊阁诗人2 小时前
Flask
开发语言·数据库·python·flask