介绍
Builder模式可用于创建一个复杂对象。用户往往不知道内部情况,可以通过构建方法来精细控制构建过程。顾名思义,Build作为创建一个类的中介类,使用Builder的方法来设置要创建类中的各个需要的参数并进行构建对应的对象。第三方库中经常能看到这样的设计模式。
使用场景
需要创建一个比较复杂的类,需要多个构造函数的时候,或者参数多,且很多参数都有可以默认值的时候。
简单实现
1 package org.sang.bean; 2 3 import java.math.BigDecimal; 4 import java.util.Objects; 5 6 /** 7 * 构建者模式 8 */ 9 public class Bank { 10 11 private Integer bankId; 12 private String bankName; 13 private String bankCode; 14 private BigDecimal bankDiscount; 15 16 public Integer getBankId() { 17 return bankId; 18 } 19 20 public void setBankId(Integer bankId) { 21 this.bankId = bankId; 22 } 23 24 public String getBankName() { 25 return bankName; 26 } 27 28 public void setBankName(String bankName) { 29 this.bankName = bankName; 30 } 31 32 public String getBankCode() { 33 return bankCode; 34 } 35 36 public void setBankCode(String bankCode) { 37 this.bankCode = bankCode; 38 } 39 40 public BigDecimal getBankDiscount() { 41 return bankDiscount; 42 } 43 44 public void setBankDiscount(BigDecimal bankDiscount) { 45 this.bankDiscount = bankDiscount; 46 } 47 48 public static class Builder { 49 private Integer bankId; 50 private String bankName; 51 private String bankCode; 52 private BigDecimal bankDiscount; 53 54 public Bank.Builder setBankId(Integer bankId) { 55 this.bankId = bankId; 56 return this; 57 } 58 59 public Bank.Builder setBankName(String bankName) { 60 this.bankName = bankName; 61 return this; 62 } 63 64 public Bank.Builder setBankCode(String bankCode) { 65 this.bankCode = bankCode; 66 return this; 67 } 68 69 public Bank.Builder setBankDiscount(BigDecimal bankDiscount) { 70 this.bankDiscount = bankDiscount; 71 return this; 72 } 73 74 public Bank build() { 75 return new Bank(this); 76 } 77 } 78 79 @Override 80 public boolean equals(Object o) { 81 if (this == o) return true; 82 if (o == null || getClass() != o.getClass()) return false; 83 Bank bank = (Bank) o; 84 return bankId.equals(bank.bankId) && 85 bankCode.equals(bank.bankCode); 86 } 87 88 @Override 89 public int hashCode() { 90 return Objects.hash(bankId, bankCode); 91 } 92 93 @Override 94 public String toString() { 95 return "Bank{" + 96 "bankId=" + bankId + 97 ", bankName='" + bankName + '\'' + 98 ", bankCode='" + bankCode + '\'' + 99 ", bankDiscount=" + bankDiscount + 100 '}'; 101 } 102 103 public Bank(Builder builder) { 104 this.bankId = builder.bankId; 105 this.bankName = builder.bankName; 106 this.bankCode = builder.bankCode; 107 this.bankDiscount = builder.bankDiscount; 108 } 109 110 public static void main(String[] args) { 111 Bank bank = new Bank.Builder() 112 .setBankId(1231) 113 .setBankCode("IBC") 114 .setBankDiscount(BigDecimal.valueOf(11)) 115 .setBankName("测试银行") 116 .build(); 117 System.out.println(bank.toString()); 118 } 119 120 }
总结
构建模式可以很方便的,在我们使用某个可动态配置功能的时候,进行行为配置参数配置等,不要忘记它的使用场景哦。可动态配置,那么就应该有一个默认配置哦,在有这种情况下,你就可以想想是不是可以采用构建者模式了