设计模式之建造者模式

🍭建造者模式(Builder Pattern)

🍎定义

创建的东西细节复杂,还必须暴露给使用者。屏蔽过程而不屏蔽细节。

产品角色(Product):Phone

抽想建造者(Builder):AbstractPhoneBuilder

具体建造者(ConcreateBuilder):PhoneBuilder

🍔代码实现

public class Phone {
    protected String cpu;
    protected String mem;
    protected String disk;
    protected String cam;

    // 只保留get方法

    public String getCpu() {
        return cpu;
    }

    public String getMem() {
        return mem;
    }

    public String getDisk() {
        return disk;
    }

    public String getCam() {
        return cam;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", mem='" + mem + '\'' +
                ", disk='" + disk + '\'' +
                ", cam='" + cam + '\'' +
                '}';
    }
}
/**
 * 抽象建造者
 */
public abstract class AbstractBuilder {
    Phone phone;

    abstract AbstractBuilder customCpu(String cpu);

    abstract AbstractBuilder customMem(String mem);

    abstract AbstractBuilder customDisk(String disk);

    abstract AbstractBuilder customCam(String cam);

    Phone getProduct() {
        return phone;
    }
}
public class XiaoMiBuilder extends AbstractBuilder {

    public XiaoMiBuilder() {
        phone = new Phone();
    }

    @Override
    AbstractBuilder customCpu(String cpu) {
        phone.cpu = cpu;
        return this;
    }

    @Override
    AbstractBuilder customMem(String mem) {
        phone.mem = mem;
        return this;
    }

    @Override
    AbstractBuilder customDisk(String disk) {
        phone.disk = disk;
        return this;

    }

    @Override
    AbstractBuilder customCam(String cam) {
        phone.cam = cam;
        return this;
    }
}
public class MainTest {
    public static void main(String[] args) {
        AbstractBuilder builder = new XiaoMiBuilder();

        builder.customCam("2亿").customMem("8G").customDisk("512G").customCpu("888");

        Phone product = builder.getProduct();
        System.out.println(product);
    }
}
Phone{cpu='888', mem='8G', disk='512G', cam='2亿'}

🍕应用场景

  • 什么场景用到?
    • StringBuilder
    • Swagger-ApiBuilder
    • 快速实现。Lombok-Builder模式
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值