设计模式之建造者模式

发布于:2024-03-11 ⋅ 阅读:(73) ⋅ 点赞:(0)

🍭建造者模式(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模式
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到