建造者模式和模板方法模式的区别

发布时间:2026/10/22 16:48:10
建造者模式和模板方法模式的区别 建造者模式 vs 模板方法模式 核心区别一、一句话本质差异模板方法模式Template Method控制一套固定流程骨架步骤顺序不能改只允许重写内部单个步骤侧重算法流程复用。建造者模式Builder拆分复杂对象的各个部件构造逻辑部件组装顺序可灵活调整最终统一产出完整对象侧重复杂对象分步构建。二、详细对比1. 核心目标不同模板方法目标复用算法流程场景一件事的执行步骤固定只是每一步实现不同例子饮料制作流程固定烧水→加原料→冲泡→装杯茶和咖啡只替换“加原料”步骤顺序永远不变。建造者目标分步组装复杂对象场景对象由多个独立部件组成组装顺序可变、部件可替换最终生成不同成品例子组装电脑CPU、主板、显卡、硬盘是独立部件可以先装主板再装CPU也能调换顺序高配/低配电脑只是部件不同。2. 流程控制权模板方法父类抽象类完全控制流程顺序模板方法定义完整步骤顺序子类只能实现步骤不能修改执行先后。// 父类固定流程publicfinalvoidmakeDrink(){boilWater();// 固定第一步addMaterial();// 子类实现brew();// 固定第三步pour();// 固定第四步}final模板方法防止子类篡改流程。建造者Director指挥组装顺序可灵活更换顺序Builder只负责造单个零件建造者只提供buildCPU()、buildGPU()等单个部件构建方法导演类决定先装哪个甚至可以两套组装逻辑。// 导演控制组装顺序可随意调换publicComputerconstructHighEnd(){builder.buildCPU();builder.buildGPU();builder.buildDisk();returnbuilder.getResult();}publicComputerconstructLowEnd(){builder.buildDisk();builder.buildCPU();// 不造显卡returnbuilder.getResult();}3. 产出物不同模板方法产出执行结果/行为一段流程、一个动作不一定是对象。比如生成文档、制作饮品、游戏角色升级流程。建造者产出复杂复合对象由多个子部件组合而成一定是完整实体对象。比如电脑、房屋、订单、复杂报文。4. 结构组成对比模板方法 组成抽象父类模板方法固定流程 抽象步骤具体子类实现抽象步骤没有分离“构建”和“组装”流程和步骤耦合在一个继承体系建造者 组成抽象Builder定义所有部件构建接口具体Builder实现每个部件怎么造Director专门控制组装顺序可选产品Product最终复杂对象职责彻底拆分造零件的类、组装顺序的类、成品类完全分离5. 拓展方式修改逻辑模板方法只能新增子类重写步骤流程骨架永远不变不适合增减步骤。如果需要新增流程步骤必须修改父类模板方法违反开闭原则。建造者新增部件扩展Builder接口即可更换组装顺序新增Director构造方法不用修改Builder增减部件组装时调用/不调用对应build方法即可扩展性更强三、最直观代码示例区分示例1模板方法固定流程classDrinkTemplate:# 固定流程顺序不可改defmake(self):self.boil_water()self.add_raw()self.brew()self.pour_cup()defboil_water(self):print(烧水)defbrew(self):print(浸泡)defpour_cup(self):print(倒入杯子)# 留给子类实现defadd_raw(self):passclassTea(DrinkTemplate):defadd_raw(self):print(加茶叶)classCoffee(DrinkTemplate):defadd_raw(self):print(加咖啡粉)# 使用流程永远一样Tea().make()Coffee().make()示例2建造者模式组装对象顺序可控# 产品电脑classComputer:def__init__(self):self.cpuself.gpu# 建造者抽象classComputerBuilder:defbuild_cpu(self):passdefbuild_gpu(self):passdefget_pc(self):pass# 具体建造者classGamePCBuilder(ComputerBuilder):def__init__(self):self.pcComputer()defbuild_cpu(self):self.pc.cpui9defbuild_gpu(self):self.pc.gpu4090defget_pc(self):returnself.pc# 导演控制组装顺序classDirector:defbuild_game_pc(self,builder):builder.build_cpu()builder.build_gpu()defbuild_simple_pc(self,builder):# 调换顺序、省略显卡builder.build_gpu()builder.build_cpu()# 使用builderGamePCBuilder()dirDirector()dir.build_game_pc(builder)pcbuilder.get_pc()四、一张总结表对比维度模板方法模式建造者模式核心关注点固定算法流程复用步骤骨架拆分对象部件灵活组装复杂实体步骤顺序父类固定不可修改由Director控制可自由调换/删减产出一段行为/流程执行结果多部件组合的复杂对象类关系依靠继承扩展步骤依靠组合拆分构建与组装逻辑职责拆分流程和步骤都在同一继承树耦合高零件构建、组装顺序、成品完全分离适用场景步骤固定仅内部实现有差异对象结构复杂部件多、组装可变五、快速选型口诀流程顺序固定只是步骤实现不同 → 模板方法要拼一个由多个零件组成的复杂对象组装顺序可改 → 建造者

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询