公众号:WarmSmile
建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
介绍
- 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
- 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
- 何时使用:一些基本部件不会变,而其组合经常变化的时候。
- 优点 :1、建造者独立,易扩展。 2、便于控制细节风险。
- 缺点 :1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。
- 使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。
实现
假设我们创建一个用户,用户可以随意选择填入,姓名,性别,年龄,说明等值。
比如:
- 姓名+性别+说明
- 姓名+性别+年龄
- 性别+说明
- 等等
-
步骤一
创建User实体类
public class User { private String name; private String sex; private String age; private String desc; }
-
步骤二
在User类里创建Builder静态类
public static class Builder{ private String name; private String sex; private String age; private String desc; public Builder name(String name){ this.name=name; return this; } public Builder sex(String sex){ this.sex=sex; return this; } public Builder age(String age){ this.age=age; return this; } public Builder desc(String desc){ this.desc=desc; return this; } public User build(){ return new User(this); } }
-
步骤三
创建User类构造方法
public User(Builder builder) { this.name=builder.name; this.sex=builder.sex; this.age=builder.age; this.desc=builder.desc; }
-
步骤四
运行
public class BuilderMain { public static void main(String[] args) { User user=new User.Builder().name("lzw").sex("男").age("18").build(); User user2=new User.Builder().name("lzw").sex("男").build(); User user3=new User.Builder().name("lzw").build(); System.out.println(user.toString()); System.out.println(user2.toString()); System.out.println(user3.toString()); } }
总结
可以看出来简单的建造者模式能让我们随心所欲的去自由搭配组合。
在java里使用javaBean模式和多参数构造函数也可以让我们自由搭配组合。
主要是为了简单理解建造者模式的设计思想
推荐
使用Lombok可以直接**@Builder**实现建造者模式。
Perseverance is the soul of success.
坚毅是成功的灵魂。