创建型-建造者模式(builder)
1,简介
建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的角色
- Builder:为创建一个产品对象的各个部件指定抽象接口。
- ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
- Director:构造一个使用Builder接口的对象。
- Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
2,demo
1)抽象建造类:Builder
package com.demo.base.design_partten.builder; /** * @author gx * 为创建产品对象的各个部件的指定抽象接口 */ public interface Builder { void buildHead(); void buildBody(); void buildFoot(); Product buildPerson(); }
2)具体的建造类
package com.demo.base.design_partten.builder; /** * 具体的建造工具 * @author gx */ public class ConcreteBuilder implements Builder { Product product; public ConcreteBuilder(){ product = new Product(); } @Override public void buildHead() { product.setHead("建造头部"); } @Override public void buildBody() { product.setBody("建造身体"); } @Override public void buildFoot() { product.setFoot("建造脚步"); } @Override public Product buildPerson() { return product; } }
3)复杂的产品类
package com.demo.base.design_partten.builder; /** * @author gx * 表示被构造的复杂对象 */ public class Product { private String head; private String body; private String foot; public String getBody() { return body; } public String getFoot() { return foot; } public String getHead() { return head; } public void setBody(String body) { this.body = body; } public void setFoot(String foot) { this.foot = foot; } public void setHead(String head) { this.head = head; } @Override public String toString() { return "Product{" + "head='" + head + '\'' + ", body='" + body + '\'' + ", foot='" + foot + '\'' + '}'; } }
4)使用 Builder 工具的类
package com.demo.base.design_partten.builder; /** * @author gx * 构造一个使用 Builder 接口的对象 */ public class Director { public Product constructProduct(Builder pb){ pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildPerson(); } }
5)业务类
public class MainTest { public static void main(String[] args) { Director director = new Director(); Product product = director.constructProduct(new ConcreteBuilder()); System.out.println(product); } }
3, 使用链式编程
- 产品类
package com.demo.base.design_partten.builder.chain; /** * @author gx * 表示一个复杂的产品 * */ public class Car { private String name; private double price; private String color; private String sell; public static Car instance(){ return new Car(); } public Car createName(String name){ this.setName(name); return this; } public Car createPrice(double price){ this.setPrice(price); return this; } public Car createColor(String color){ this.setColor(color); return this; } public Car createSell(String sell){ this.setSell(sell); return this; } public double getPrice() { return price; } public String getName() { return name; } public String getColor() { return color; } public String getSell() { return sell; } public void setPrice(double price) { this.price = price; } public void setName(String name) { this.name = name; } public void setColor(String color) { this.color = color; } public void setSell(String sell) { this.sell = sell; } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", price=" + price + ", color='" + color + '\'' + ", sell='" + sell + '\'' + '}'; } }
- 业务类
package com.demo.base.design_partten.builder.chain; /** * @author gx */ public class Test { public static void main(String[] args) { Car car = Car.instance().createSell("100").createColor("red").createName("特斯拉").createPrice(120.3); System.out.println(car); } }
4. 使用场景
- Mybatis 缓存的创建,CacheBuilder 类来创建 Cache。
本文作者:primaryC
本文链接:https://www.cnblogs.com/cnff/p/17406827.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步