Builder_建造者模式
在构建复杂的对象时使用,可以分离复杂对象的构建和表示。
主要角色:
- 产品角色(Product):包含多个组成部件的复杂对象,我们要创建的目标对象。
- 抽象构建者(Builder):包含创建各部件的抽象方法的接口,和一个返回目标对象的方法。
- 具体构建者(Concrete Builder):实现接口,完成目标对象的创建方法。
- 指挥者(Director):调用构造者对象中的方法创建部件,完成目标对象的创建。
运用建造者模式创建类对象
产品角色(Product)
public class Product { private String name; private Product(){} public void setName(String name) { this.name = name; } @Override public String toString() { return "name: "+name; } }
抽象构建者(Builder)
public interface Builder { void buildName(String name); Product build(); }
具体构建者(Concrete Builder)
public class ConcreteBuilder implements Builder { private Product product = new Product(); @Override public void buildName(String name) { product.setName(name); } @Override public Product build() { return product; } }
指挥者(Director)
public class Director { private Builder builder; public Director(Builder builder){ this.builder = builder; } public Product construct(){ builder.buildName("lin"); return builder.build(); } }
调用者(Caller)
public class Caller { public static void main(String[] args) { Product product = new Director(new ConcreteBuilder()).construct(); System.out.println(product.toString()); } }
简化创建过程
建造者(Builder)模式在应用过程中可以根据需要改变,如果创建的产品种类只有一种,只需要一个具体建造者,这时可以省略掉抽象建造者,甚至可以省略掉指挥者角色。
- 使用内部类省略抽象建造者角色
public class Product { private String name; private Product(){} private void setName(String name) { this.name = name; } @Override public String toString() { return "name: "+name; } static class ProductBuilder { private Product product = new Product(); public ProductBuilder buildName(String name){ product.setName(name); return this; } public Product build(){ return product; } } }
- 使用链式调用省略指挥者角色
public class Caller { public static void main(String[] args) { String product = new Product.ProductBuilder().buildName("lin").build().toString(); System.out.println(product); } }
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16521547.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南