当前位置: 首页 > news >正文

创建型 建造者模式

建造者模式的使用场景:

1. 当被创建的对象内部成员之间相互依赖时,不能单纯的直接new出来;

2. 当初始化参数比较多时,直接new出来,构造方法内的参数过多,代码不够简洁,容易出错;

3. 直接new出来对象,再采用set方法为成员赋值时,可能会产生在所有需要set的属性被设置前,该对象处于无效状态,而有时候我们的需求是对象创建出来即生效;

4. 如果需要一次性创建相互有依赖关系的多个对象时,就应该使用建造者模式。

工厂模式跟建造者模式的区别:

工厂方法是创建同一种类针对的很多,而 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);

}

}

}

http://www.jsqmd.com/news/416793/

相关文章:

  • find匹配文件名 - liyan
  • AI鲁棒性测试详解
  • 7连标!中电金信助力银行外汇展业改革
  • 2026年靠谱的电感振动盘/精密铝盘振动盘生产厂家实力参考哪家强(更新) - 行业平台推荐
  • 我的新文章 - 法Q
  • 2026年切纸机厂家推荐:几家实力企业盘点 - 品牌排行榜
  • golang常见类型作为参数的eBPF解析 - liyan
  • 2026年口碑好的景观不锈钢雕塑/商业地产不锈钢雕塑帮我推荐几家源头厂家推荐 - 行业平台推荐
  • 2026年质量好的三体系认证公司/9001认证公司实力厂家综合评估推荐几家 - 行业平台推荐
  • http及websocket性能对比 - liyan
  • OceanBase混合检索(Hybrid Search):多模态检索实战指南
  • 一种责任链模式的实现 - liyan
  • 2026年切纸机品牌推荐:这些口碑品牌值得关注 - 品牌排行榜
  • lisp-do循环 - liyan
  • 2025年方圆3公里必吃烧菜火锅TOP10榜单出炉,美食/社区火锅/烧菜火锅/特色美食/火锅烧菜火锅品牌推荐 - 品牌推荐师
  • 黑客必备利器:如何在系统上安装和使用CobaltStrike?黑客技术零基础入门到精通实战教程(CobaltStrike工具 -CobaltStrike木马 -CobaltStrike安装 Coba
  • lisp-lambda函数 - liyan
  • 2026年靠谱的水利工程水泥涵管/市政排水管水泥涵管哪家便宜源头直供参考(真实参考) - 行业平台推荐
  • 2026年评价高的原料药生产耙式真空干燥机/农药耙式真空干燥机实力厂家口碑参考口碑排行 - 行业平台推荐
  • 合并区间 - liyan
  • 河北石家庄人才落户咨询品牌机构哪家口碑好 - 工业推荐榜
  • GEO优化多少钱?五大高性价比服务商品牌推荐 - 博客湾
  • 分析河北实力强的视功能检查专业企业,舒同视光口碑怎么样 - mypinpai
  • 使用Lua语言对嵌入式通信设备进行定制化的Soc开发 —— 《深度学习LuatOS》嵌入式
  • C# hangfire配置方法 - Bill
  • lisp-let变量声明 - liyan
  • android studio:安装flutter
  • 深聊随州有名的网站建设公司,华腾微联品牌口碑如何? - mypinpai
  • 2026年比较好的超高压均质机/羊汤均质机厂家推荐哪家好(高评价) - 行业平台推荐
  • 2026年比较好的消防水带厂家推荐及选购指南 - 行业平台推荐