建造者是23种设计模式之一,我在网上看到了很多不同方式的构建者模式,但是发现讲解各有千秋。
以下为我个人理解。
类型:创建型模式
项目背景:这里我们使用一个小案例来理解
账号安全:手机号、电子令牌、邮箱
账号安全等级:低风险(任意绑定两种方式)、中风险(任意绑定一种方式)、高风险(谁都不绑定)
当我们创建一个账号的时候,需要输入账号名和密码,创建出来的账号是高风险账号。
但是我们要绑定手机号、电子令牌或者邮箱来增加安全等级,让我们的账号更加安全。
/** * 账号类 */ public class Account { /** * 用户名和密码为必选项 */ private String name; private String password; /** * 手机号、电子邮箱、令牌为可选项 */ private String phone; private String email; private String token; private Account(Builder builder) { name = builder.name; password = builder.password; phone = builder.phone; email = builder.email; token = builder.token; } public static final class Builder { private String name; private String password; private String phone; private String email; private String token; public Builder(String name, String password) { this.name = name; this.password = password; } public Builder phone(String phone) { this.phone = phone; return this; } public Builder email(String email) { this.email = email; return this; } public Builder token(String token) { this.token = token; return this; } public Account build() { return new Account(this); } } }
public class Test { public static void main(String[] args) { //创建一个高风险账号 Account lwbnb1 = new Account.Builder("lwbnb1", "666666").build(); //创建一个中风险账号,并且随意添加你想要绑定的选项 Account lwbnb2 = new Account.Builder("lwbnb2", "666666").phone("13811111111").build(); //创建一个低风险账号 Account lwbnb3 = new Account.Builder("lwbnb3", "666666").phone("13811111111").token("7777777").build(); } }
通过上述例子,我们可以看到,使用了构建者模式,我们把必须要设置的属性,封装在了内部的builder类,而可选属性,作为方法定义,让使用者自由选择。
实际该模式在lombok中可以使用@Builder来快速生成类中的builder。
但是构建者模式并不指于此,我们还可以使用构建者来封装一个对象的构建过程。
这里直接上参考博客:https://www.jianshu.com/p/3d1c9ffb0a28