设计模式——建造者模式(BuilderPattern)
2013-11-30 17:04 雪夜&流星 阅读(208) 评论(0) 编辑 收藏 举报建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
UML图:
Builder:
package com.cnblog.clarck; /** * 抽象建造者,确定产品有两个部分A和B组成,并声明一个得到产品组合后得到结果的方法getResult. * * @author clarck * */ public abstract class Builder { public abstract void buildPartA(); public abstract void buildPartB(); public abstract Product getResult(); }
Director:
package com.cnblog.clarck; /** * 指挥者 * * @author clarck * */ public class Director { public void Construct(Builder builder) { builder.buildPartA(); builder.buildPartB(); } }
Product:
package com.cnblog.clarck; import java.util.ArrayList; import java.util.List; /** * 产品类,由多个部分组成 * * @author clarck * */ public class Product { private List<String> parts = new ArrayList<String>(); public void add(String part) { parts.add(part); } public void show() { System.out.println("产品 创建-----"); for (String part : parts) { System.out.println(part); } } }
ConcrateBuilder1:
package com.cnblog.clarck; /** * 具体建造者 * * @author clarck * */ public class ConcrateBuilder1 extends Builder { private Product product = new Product(); @Override public void buildPartA() { product.add("部件A"); } @Override public void buildPartB() { product.add("部件B"); } @Override public Product getResult() { return product; } }
ConcrateBuilder2:
package com.cnblog.clarck; public class ConcrateBuilder2 extends Builder { private Product product = new Product(); @Override public void buildPartA() { product.add("部件X"); } @Override public void buildPartB() { product.add("部件Y"); } @Override public Product getResult() { return product; } }
Client:
package com.cnblog.clarck; /** * 测试类 * * @author clarck * */ public class Client { public static void main(String[] args) { Director director = new Director(); Builder builder1 = new ConcrateBuilder1(); Builder builder2 = new ConcrateBuilder2(); director.Construct(builder1); Product product1 = builder1.getResult(); product1.show(); director.Construct(builder2); Product product2 = builder2.getResult(); product2.show(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本