设计模式之建造者模式

🍭建造者模式(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模式

相关推荐

  1. 【前端设计模式建造模式

    2024-03-14 20:08:01       40 阅读
  2. 设计模式建造模式

    2024-03-14 20:08:01       21 阅读
  3. 设计模式建造模式

    2024-03-14 20:08:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 20:08:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 20:08:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 20:08:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 20:08:01       20 阅读

热门阅读

  1. 快速在Linux系统安装MySQL

    2024-03-14 20:08:01       21 阅读
  2. Android API 30及更高版本网络权限设置

    2024-03-14 20:08:01       19 阅读
  3. linux Shell 命令行-08-file include 文件包含

    2024-03-14 20:08:01       21 阅读
  4. PYTHON 120道题目详解(106-108)

    2024-03-14 20:08:01       20 阅读
  5. oracle创建表空间语句

    2024-03-14 20:08:01       19 阅读
  6. 触发器

    2024-03-14 20:08:01       19 阅读
  7. WPF中使用LiveCharts绘制散点图

    2024-03-14 20:08:01       19 阅读
  8. SQLite语句

    2024-03-14 20:08:01       22 阅读
  9. mysql订单表设计

    2024-03-14 20:08:01       18 阅读
  10. vector与list的区别与应用?

    2024-03-14 20:08:01       27 阅读