建造者模式
将产品和产品的建造过程进行解耦 ===> 建造者模式
1 盖房子需求#
#
2 传统方式解决盖房需求#
1)思路
创建一个抽象的房子类,类中是抽象的建造方法,具体类中实现抽象的方法,
#
3 传统方式的问题分析#
1)优点是好理解,操作简单
2)设计的程序结构,过于简单,没有设计缓冲层对象,程序的扩展和维护性不强。(也就是说这种设计方案将
产品(房子)和创建产品的过程(建造房子的过程)封装在一起,耦合性增强了)
3)解决方案:将产品和产品的建造过程解耦
#
4 建造者模式基本介绍#
#
5 建造者模式的四个角色#
#
6 建造者模式原理类图#
7 建造者模式解决盖房需求应用实例#
1)产品:
public class House { private String baise; private String wall; private String roofed; public String getBaise() { return baise; } public void setBaise(String baise) { this.baise = baise; } public String getWall() { return wall; } public void setWall(String wall) { this.wall = wall; } public String getRoofed() { return roofed; } public void setRoofed(String roofed) { this.roofed = roofed; } }
2)抽象的建造者
/** * @author houChen * @date 2020/9/25 7:18 * @Description: 建造者模式中抽象的建造者 */ public abstract class HouseBuilder { protected House house = new House(); // 建造的流程 //打桩 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed(); //建造房子 public House build(){ /* buildBasic(); buildWalls(); roofed();*/ return house; } }
3)具体的建造者
/** * @author houChen * @date 2020/9/25 7:21 * @Description: */ public class CommonHouse extends HouseBuilder { @Override public void buildBasic() { System.out.println("给普通房子打桩!5米 "); } @Override public void buildWalls() { System.out.println("给普通房子砌墙!6米 "); } @Override public void roofed() { System.out.println("给普通房子盖顶!7米 "); } }
4)建造模式中的指挥者
/** * @author houChen * @date 2020/9/25 7:24 * @Description: 建造者模式中的指挥者 */ public class HouseDirector { HouseBuilder houseBuilder = null; public HouseDirector(HouseBuilder houseBuilder) { this.houseBuilder = houseBuilder; } //将房子建造的过程交给指挥者 public House constractHouse(){ houseBuilder.buildBasic();; houseBuilder.buildWalls(); houseBuilder.roofed(); return houseBuilder.build(); } }
5)测试
public class Client { public static void main(String[] args) { CommonHouse commonHouse = new CommonHouse(); HouseDirector director = new HouseDirector(commonHouse); House house = director.constractHouse(); System.out.println(house); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?