创建型 建造者模式

简介: 设计模式

建造者模式的使用场景:

  1. 当被创建的对象内部成员之间相互依赖时,不能单纯的直接new出来;
  2. 当初始化参数比较多时,直接new出来,构造方法内的参数过多,代码不够简洁,容易出错;
  3. 直接new出来对象,再采用set方法为成员赋值时,可能会产生在所有需要set的属性被设置前,该对象处于无效状态,而有时候我们的需求是对象创建出来即生效;
    1. 如果需要一次性创建相互有依赖关系的多个对象时,就应该使用建造者模式。

工厂模式跟建造者模式的区别:
工厂方法是创建同一种类针对的很多,而 Builder 模式创建的是一个对象,只针对一个。他们两个侧重面不同。
工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。
网上有一个经典的例子很好地解释了两者的区别。顾客走进一家餐馆点餐,我们利用工厂模式,根据用户不同的选择,来制作不同的食物,比如披萨、汉堡、沙拉。对于披萨来说,用户又有各种配料可以定制,比如奶酪、西红柿、起司,我们通过建造者模式根据用户选择的不同配料来制作披萨。

/**

  • 建造者模式
    */
    public class ThreadPoolConfig {
    private String name;
    private int coreThreadNum;
    private int maxThreadNum;
    private long keepAlive;

    private ThreadPoolConfig(Builder builder){

     this.name = builder.name;
     this.coreThreadNum = builder.coreThreadNum;
     this.maxThreadNum = builder.maxThreadNum;
     this.keepAlive = builder.keepAlive;
    

    }

    public static class Builder{

     private String name;
     private int coreThreadNum;
     private int maxThreadNum;
     private long keepAlive;
    
     public Builder setName(String name){
         this.name = name;
         return this;
     }
    
     public Builder setCoreThreadNum(int coreNum){
         this.coreThreadNum = coreNum;
         return this;
     }
    
     public Builder setMaxThreadNum(int maxNum){
         this.maxThreadNum = maxNum;
         return this;
     }
    
     public Builder setAlive(Long keepAlive){
         this.keepAlive = keepAlive;
         return this;
     }
    
     public ThreadPoolConfig build(){
         if(TextUtils.isEmpty(name)){
             throw new IllegalArgumentException("name not empty");
         }
         if(coreThreadNum < 0){
             throw new IllegalArgumentException("num not below 0");
         }
         return new ThreadPoolConfig(this);
     }
    

    }

}

相关文章
|
2月前
|
XML JSON 数据格式
创建型 工厂模式
工厂模式包含三种变体:简单工厂(集中创建,适合逻辑简单场景)、工厂方法(抽象工厂接口+多实现类,符合开闭原则,应对复杂创建逻辑)和抽象工厂(统一创建多个关联对象,适用于产品族场景)。三者均用于封装对象创建过程,提升复用性与可维护性。(239字)
100 1
|
2月前
|
设计模式 BI
创建型 原型模式
原型模式通过复制现有对象(原型)创建新实例,适用于创建成本高、差异小的场景。分浅拷贝(仅复制基本类型和引用地址,共享对象)与深拷贝(完全独立副本,递归或序列化实现),二者核心区别在于堆内存中是否生成新对象。(239字)
92 0
冰洲石材料与光学特性
冰洲石(天然方解石)是双折射率最高(Δn=0.172)的光学晶体,可高效分离并输出振动垂直的线偏振光,消光比达1×10⁻⁵,是格兰棱镜等高端偏振元件不可替代的核心材料。
|
2月前
|
数据采集 监控 Java
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
本文详解2026年电商比价系统构建:基于淘宝、京东、拼多多等多平台API,实现“数据采集→价格监控→智能分析→自动决策”闭环。涵盖同款匹配、动态定价、实时预警及可视化看板,助力企业科学调价、提升转化与利润。(239字)
|
2月前
|
人工智能 运维 安全
|
2月前
|
运维 监控 API
STAROps RUM 智能巡检实践:把体验退化提前看清楚
RUM巡检基于阿里云用户体验监控(RUM),可对真实用户体验进行持续、智能分析。它围绕页面、业务链路、版本和设备,综合研判页面性能、接口耗时、用户行为、转化及崩溃数据,发现尚未触发告警的体验退化,并通过基线对比与会话回放还原问题现场。
254 13
|
1月前
|
人工智能 自然语言处理 安全
阿里云千问办公活动:一站式AI生产力平台,限时限量积分加倍
千问办公是阿里巴巴全新推出的一站式 AI 办公平台,不止于对话,更注重交付——用户仅需一句话,即可完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务,直接获得可用成果。目前已全面覆盖桌面端、网页端,并深度接入钉钉生态,依托个人云盘、IM、连接器等模块打通数据与设备,让 AI 真正融入工作流,随时随地响应办公需求。
|
2月前
|
人工智能 供应链 搜索推荐
GEO 深度进阶:从入门到行业实战的完整路径
本文揭秘GEO(生成式引擎优化)本质:非SEO升级,而是内容价值传递范式转移。指出AI不“找”内容而“读”内容,强调结构化、可提取、可验证的“引用友好型”内容设计。通过餐饮、教育、SaaS三大行业实战案例,拆解从“被收录”到“被首选引用”的进阶路径,助你构建AI时代的内容护城河。
231 1
|
2月前
|
人工智能 搜索推荐 知识图谱
2026 GEO实战指南:让AI搜索引擎正确引用你的技术文章
GEO(生成式引擎优化)是面向LLM检索-推理-生成链路的信息组织工程,聚焦语义分块、结构化数据(Schema)、引用可信度与实体关系构建,提升内容在AI搜索引擎中的召回率与引用率,非SEO替代品,而是机器可读性的新基础设施。
303 1
|
2月前
|
人工智能 数据挖掘 数据安全/隐私保护
不会写提示词?用 4 个要素把 AI 用进日常办公
以会议纪要、周报和邮件为例,介绍用“对象、材料、要求、输出格式”四个要素编写办公提示词,并提供可复用模板与数据安全核对清单。

热门文章

最新文章