建造者模式

建造者模式

建造者模式(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);
    }
}
相关推荐
杨荧1 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck3 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
白子寰8 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT20 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。22 分钟前
c++多线程
java·开发语言
小政爱学习!24 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
daqinzl30 分钟前
java获取机器ip、mac
java·mac·ip
k093339 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长