设计模式之建造者模式
今天学习了建造者模式,核心就是构建和表示分离。如果一个对象组成部分相对稳定,构建过程千变万化,则其可以采用建造者模式。
建造者模式的核心思想:构建和表示分离
在建造者模式中,分为三个部分:指导者,虚拟的建造者,实际的建造者
指导者:指导建造者进行建造,通用方法为构造方法
虚拟建造者:抽象出对象所必须的方法 将建造过程抽象化
实际的建造者:也可以称之为真实的建造者 可以进行对象的逐步建造
在这里我以电脑的构建为例,写了一个真实样例,以便方便自己理解建造者模式;
在我的设计中:
1.Engineer充当的是指导者的角色--->Director
2.Firm充当的是抽象的建造者,声明了建造者所必须的一些方法或者步骤---->Builder
3.SAMSUNG是真实的建造者,实现了抽象建造者的方法,进行产品的构建---->ConcreteBuilder
4.Computer是产品,最终表现形式
建造者模式的核心思想,构建过程与表现分离,以下是不同的角色的类
Director指导者:
package v3; //工程师指导电脑的生产过程 public class Engineer { public Computer Build(Firm firm){ firm.BuildComputerKeyBoard(); firm.BuildComputerMaster(); firm.BuildComputerMouse(); firm.BuildComputerScreen(); return firm.BuildComputer(); } }
Builder抽象的建造者:
package v3; //厂商 抽象 public abstract class Firm { public abstract void BuildComputerMaster(); public abstract void BuildComputerScreen(); public abstract void BuildComputerMouse(); public abstract void BuildComputerKeyBoard(); public abstract Computer BuildComputer(); }
ConcretBuilder真实的建造者:
package v3; public class SAMSUNG extends Firm { private Computer computer =null; public SAMSUNG() { computer =new Computer(); } @Override public void BuildComputerMaster() { computer.Master="HP 越灵 真的好"; } @Override public void BuildComputerScreen() { computer.Screen="HTC 更亮"; } @Override public void BuildComputerMouse() { computer.Mouse="罗技 三亿鼠标的枪战梦想"; } @Override public void BuildComputerKeyBoard() { computer.Keyboard="真机械键盘质感"; } @Override public Computer BuildComputer() { return computer; } }
Product产品:Computer
package v3; //组成部分固定 组成方法急剧变化 public class Computer { public String Master; public String Screen; public String Mouse; public String Keyboard; @Override public String toString() { return "Computer{" + "Master='" + Master + '\'' + ", Screen='" + Screen + '\'' + ", Mouse='" + Mouse + '\'' + ", Keyboard='" + Keyboard + '\'' + '}'; } }
整个建造者模式的测试:
package v3; //组成部分固定 组成方法急剧变化 public class Computer { public String Master; public String Screen; public String Mouse; public String Keyboard; @Override public String toString() { return "Computer{" + "Master='" + Master + '\'' + ", Screen='" + Screen + '\'' + ", Mouse='" + Mouse + '\'' + ", Keyboard='" + Keyboard + '\'' + '}'; } }
执行结果:
然后学习如何对建造者模式进行简化,将指导者与抽象的建造者合并
指导者与抽象的建造者合并之后的结果是这样的
package v4; //厂商 抽象 public abstract class Firm { Computer computer=new Computer(); public abstract void BuildComputerMaster(); public abstract void BuildComputerScreen(); public abstract void BuildComputerMouse(); public abstract void BuildComputerKeyBoard(); public Computer BuildComputer(Firm firm){ firm.BuildComputerKeyBoard(); firm.BuildComputerMaster(); firm.BuildComputerScreen(); firm.BuildComputerMouse(); return firm.getComputer(); } public Computer getComputer(){ return computer; } }
最后测试结果的代码为
Firm firm =new ConcreteFirm(); computer=firm.BuildComputer(firm);
核心是自己指导自己进行对象的建造。
恐惧源于无知,代码改变世界
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义