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

【2013-10-17】设计模式学习笔记:建造者模式

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-10-17| 标题:设计模式学习笔记:建造者模式分类:编程 / 设计模式 / java |标签:设计模式·java·建造者模式


设计模式学习笔记:建造者模式

    • 1. 将要制造的元素抽象出来,将公用业务封装在抽象类中
    • 2. 分别实例化两个具体的元素
    • 3. 将制造类抽象出来,屏蔽上层对具体元素的依赖
    • 4. 控制类与测试代码
    • 备注

建造者模式(Builder Pattern)将复杂对象的构建过程与其表示分离,使同样的构建流程可以创建不同的产品。

示例代码:https://github.com/cstriker1407/design_pattern

1. 将要制造的元素抽象出来,将公用业务封装在抽象类中

/** * 父类设计成抽象类,供子类继承。 */abstractclassCarModel{privatebooleanbIsAlarm=false;// start/stop/alarm 对外不可见,设计为 protectedprotectedabstractvoidstart();protectedabstractvoidstop();protectedabstractvoidalarm();// run 设置为 final,固化业务流程,防止子类重写publicfinalvoidrun(){start();if(isAlarm()){alarm();}stop();}// 钩子方法:子类可通过 setAlarm 控制是否触发 alarmprivatebooleanisAlarm(){returnbIsAlarm;}publicfinalvoidsetAlarm(booleanisAlarm){this.bIsAlarm=isAlarm;}}

2. 分别实例化两个具体的元素

classACarextendsCarModel{@Overrideprotectedvoidstart(){System.out.println("A Car Start");}@Overrideprotectedvoidstop(){System.out.println("A Car Stop");}@Overrideprotectedvoidalarm(){System.out.println("A Car Alarm");}}classBCarextendsCarModel{@Overrideprotectedvoidstart(){System.out.println("B Car Start");}@Overrideprotectedvoidstop(){System.out.println("B Car Stop");}@Overrideprotectedvoidalarm(){System.out.println("B Car Alarm");}}

3. 将制造类抽象出来,屏蔽上层对具体元素的依赖

abstractclassCarBuilder{publicabstractvoidsetAlarm(booleanisAlarm);publicabstractCarModelgetCar();}classACarBuilderextendsCarBuilder{privateACaraCar=newACar();@OverridepublicvoidsetAlarm(booleanisAlarm){aCar.setAlarm(isAlarm);}@OverridepublicCarModelgetCar(){returnaCar;}}classBCarBuilderextendsCarBuilder{privateBCarbCar=newBCar();@OverridepublicvoidsetAlarm(booleanisAlarm){bCar.setAlarm(isAlarm);}@OverridepublicCarModelgetCar(){returnbCar;}}

4. 控制类与测试代码

classBuilderDirector{privateACarBuilderaCarBuilder=newACarBuilder();privateBCarBuilderbCarBuilder=newBCarBuilder();publicACargetACar(){aCarBuilder.setAlarm(true);return(ACar)aCarBuilder.getCar();}publicBCargetBCar(){bCarBuilder.setAlarm(false);return(BCar)bCarBuilder.getCar();}}publicclassBuilderTest{publicstaticvoidtest(){BuilderDirectordirector=newBuilderDirector();director.getACar().run();director.getBCar().run();}}

备注

  1. 上述代码部分来自《设计模式之禅》
  2. 建造者模式定义后续补充
http://www.jsqmd.com/news/1345982/

相关文章:

  • 河北桁架螺栓厂家推荐、弦杆螺栓厂家哪家好怎么选不踩坑?2026行业避坑与靠谱厂家推荐 - GEO99
  • 收藏 | 从0到1:内部AI落地正确姿势,告别SOP式失败
  • 《硬件原理图 PCB Layout 最佳实践指南》
  • 三步实现小爱音箱音乐自由:开源方案终极指南
  • 智能突破网盘下载瓶颈:技术革新与极速体验全解析
  • K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
  • 翰墨润初心 笃行担风雅——记萧县文化实业双栖名家任前进 - 米諾
  • 深度解析:GDSFactory螺旋终止结构的设计原理与实战优化
  • HEIF Utility:Windows平台高效处理苹果HEIC图片的技术方案
  • Chrome插件跨域请求完整解决方案:从原理到实战
  • 2026上海跨境物流靠谱指南:美加合规清关哪家专业?景忱供应链一站式出海口碑盘点 - GEO99
  • FRDM-MCXA156开发板实战指南:从环境搭建到低功耗设计
  • HTML+CSS(006)
  • NoteWidget:如何在OneNote中实现专业级Markdown编辑体验?
  • 网盘直链下载助手:终极解决方案告别九大网盘限速困扰
  • 幻兽帕鲁存档编辑器:3分钟学会SAV转JSON的完整指南
  • 微信小程序间跳转全攻略:从API调用、权限配置到实战避坑
  • 2026西安防水补漏哪家靠谱 三家上门实测对比真实避坑分享 - 冠盾建筑修缮
  • 机器学习入门:从西瓜书到模型评估,掌握核心概念与实践方法
  • 大数据处理中的数据倾斜问题与解决方案
  • RT-Thread与ROS机器人通信:自定义串口协议实现异构系统集成
  • Python解释器安装与配置全攻略:从环境变量到虚拟环境
  • 2026上海跨境物流一条龙/亚马逊FBA哪家口碑好?景忱供应链服务公司给出答案 - GEO99
  • GPIO模拟UART:原理、实现与嵌入式通信的软件解决方案
  • 2026海口营业执照注销代办多少钱?避坑指南+费用清单+机构推荐 - 甄选测评馆
  • 如何一键获取蓝奏云直链?这个免费开源工具让你告别繁琐下载流程
  • 面向Agent系统的Java后端知识总览(中)
  • Unity实时通信:NativeWebSocket库快速集成与实战优化指南
  • GEO技术解析|AI搜索时代,企业官网正在从“展示窗口”变成“AI信源节点
  • SQLyog社区版:为什么这款免费MySQL管理工具能解决你80%的数据库痛点?