23种设计模式 - 建造者模式(Builder)
建造者模式Builder—— 一步一步拼出来大白话解释你去点外卖套餐可以自己一步步选选主食汉堡 / 鸡腿选饮料可乐 / 橙汁选大小中杯 / 大杯要不要加辣你不是一次性拿到结果而是一步一步配置出来最后点下单才得到完整套餐。 重点是怎么一步步选构建过程和最终吃什么最终产品是分开的建造者模式把一个复杂对象的构建过程拆分成多个步骤可以用同样的构建步骤创造出不同的对象。重点是——构建过程和最终产品分开。常见场景SQL 查询构建器SELECT * FROM users WHERE id1 ORDER BY nameHTTP 请求构建设置 URL、Header、Body、超时时间游戏角色创建选职业、装备、技能笔记本选配核心思路产品类最终要创建的复杂对象建造者接口定义所有构建步骤具体建造者实现具体步骤指挥者Director按顺序调用步骤可选用于封装固定套餐C 代码示例场景构建电脑配置支持游戏本和办公本两种预设也支持自定义。#includeiostream#includestring#includememory// // 产品电脑// structComputer{std::string cpu;std::string gpu;intramGB0;intstorageGB0;std::string monitor;voiddescribe()const{std::cout【电脑配置】\n;std::cout CPU: cpu\n;std::cout GPU: gpu\n;std::cout 内存: ramGBGB\n;std::cout 存储: storageGBGB\n;std::cout 显示器: monitor\n;}};// // 建造者接口// classComputerBuilder{public:virtual~ComputerBuilder()default;virtualComputerBuildersetCPU(conststd::stringcpu)0;virtualComputerBuildersetGPU(conststd::stringgpu)0;virtualComputerBuildersetRAM(intgb)0;virtualComputerBuildersetStorage(intgb)0;virtualComputerBuildersetMonitor(conststd::stringmonitor)0;virtualComputerbuild()0;};// // 具体建造者// classStandardComputerBuilder:publicComputerBuilder{private:Computer computer;public:ComputerBuildersetCPU(conststd::stringcpu)override{computer.cpucpu;return*this;}ComputerBuildersetGPU(conststd::stringgpu)override{computer.gpugpu;return*this;}ComputerBuildersetRAM(intgb)override{computer.ramGBgb;return*this;}ComputerBuildersetStorage(intgb)override{computer.storageGBgb;return*this;}ComputerBuildersetMonitor(conststd::stringmonitor)override{computer.monitormonitor;return*this;}Computerbuild()override{returncomputer;// 返回最终产品}};// // 指挥者封装预设套餐// classComputerDirector{public:// 游戏本预设ComputerbuildGamingPC(ComputerBuilderbuilder){returnbuilder.setCPU(Intel i9-13900K).setGPU(NVIDIA RTX 4090).setRAM(32).setStorage(2000).setMonitor(4K 144Hz 曲面显示器).build();}// 办公本预设ComputerbuildOfficePC(ComputerBuilderbuilder){returnbuilder.setCPU(Intel i5-13500).setGPU(Intel 核显).setRAM(16).setStorage(512).setMonitor(1080P 普通显示器).build();}};intmain(){ComputerDirector director;// 用预设套餐std::cout 游戏本 \n;StandardComputerBuilder gamingBuilder;Computer gamingPCdirector.buildGamingPC(gamingBuilder);gamingPC.describe();std::cout\n 办公本 \n;StandardComputerBuilder officeBuilder;Computer officePCdirector.buildOfficePC(officeBuilder);officePC.describe();// 自定义配置链式调用std::cout\n 自定义配置 \n;StandardComputerBuilder customBuilder;Computer customPCcustomBuilder.setCPU(AMD Ryzen 7 7800X).setGPU(AMD RX 7900 XTX).setRAM(64).setStorage(4000).setMonitor(超宽曲面显示器).build();customPC.describe();return0;}输出 游戏本 【电脑配置】 CPU: Intel i9-13900K GPU: NVIDIA RTX 4090 内存: 32GB 存储: 2000GB 显示器: 4K 144Hz 曲面显示器 办公本 【电脑配置】 CPU: Intel i5-13500 ... 自定义配置 【电脑配置】 CPU: AMD Ryzen 7 7800X ...优缺点说明✅ 优点构建步骤清晰可读性好✅ 优点同样的步骤可产出不同配置的对象✅ 优点链式调用非常优雅❌ 缺点需要创建多个建造者类代码量增加❌ 缺点产品结构变化时建造者也要改一句话记忆建造者模式 点外卖自定义套餐一步步选最后确认下单拿到你想要的那份。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2450383.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!