定义:
指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
特点:
各个具体的建造者相互独立,有利于系统的扩展。(优点)
- 客户端不必知道产品内部组成的细节,便于控制细节风险。(优点)
- 产品的组成部分必须相同,这限制了其使用范围。(缺点)
如果产品的内部变化复杂,该模式会增加很多的建造者类。(缺点)
通常适用场景:
创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。
创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。
demo代码:
中规中矩的建造者模式
public class User {private String name;private String password;private String nickName;private int age;private User(String name, String password, String nickName, int age) {this.name = name;this.password = password;this.nickName = nickName;this.age = age;}public static UserBuilder builder() {return new UserBuilder();}public static class UserBuilder {private String name;private String password;private String nickName;private int age;private UserBuilder() {}public UserBuilder name(String name) {this.name = name;return this;}public UserBuilder password(String password) {this.password = password;return this;}public UserBuilder nickName(String nickName) {this.nickName = nickName;return this;}public UserBuilder age(int age) {this.age = age;return this;}public User build() {return new User(name, password, nickName, age);}}}
注解版(使用lombok @Builder)
@Builderclass User {private String name;private String password;private String nickName;private int age;}
只想用链式写法,不要建造者模式(使用lombok @Accessors(chain = true) 和 @Data) ```java @Accessors(chain = true) @Data public class User { private String name; private String password; private String nickName; private int age;
} public void main(String[] args) { User user= new User().setName(“张三”).setNickName(“小张”).setPassword(“123456”).setAge(18); }
- 测试```javapublic static void main(String[] args) {User user = User.builder().name("张三").nickName("小张").password("123456").age(18).build();}
