ビルダーパターン学習

入門

ビルダーモードは、複雑なオブジェクトを作成するために使用することができます。ユーザーは、多くの場合、内部の状況を知らない、ビルドプロセスが細かく工法によって制御することができます。名前が示すように、クラスとしてビルドクラスは、各クラスに必要なパラメータおよび組み込み対応するオブジェクトを設定する方法を作成するために、Builderを使用して中間体を作成します。サードパーティのライブラリは、多くの場合、このようなデザインパターンを見ることができます。

利用シナリオ

私たちは、あなたが複数のコンストラクタ、または多くのパラメータを必要とし、パラメータのデフォルト値の多くを持つことができたときに、より複雑なクラスを作成する必要があります。

単純な実装

  1つの パッケージorg.sang.bean。
  2  
  3  インポートのjava.math.BigDecimal。
  4  インポートjava.util.Objects。
  5  
  6  / ** 
  7  *构建者模式
   8   * / 
  9  パブリック クラス銀行{
 10  
11      プライベート整数bankId。
12      プライベート文字列bankName。
13      プライベート文字列bankCode。
14      民間のBigDecimal bankDiscount。
15  
16      公共の整数getBankId(){
 17          リターンbankId。
18      }
 19  
20      公共 ボイドsetBankId(整数bankId){
 21          この .bankId = bankId。
22      }
 23  
24      公衆ストリングgetBankName(){
 25          リターンbankName。
26      }
 27  
28      公共 ボイドsetBankName(文字列bankName){
 29          この .bankName = bankName。
30      }
 31  
32      公共の文字列getBankCode(){
 33          リターンbankCode。
34      }
35  
36      公共 ボイドsetBankCode(文字列銀行コード){
 37          この .bankCode = 銀行コード。
38      }
 39  
40      公共のBigDecimal getBankDiscount(){
 41          リターンバンク割引。
42      }
 43  
44      公共 ボイドsetBankDiscount(BigDecimalのバンク割引){
 45          この .bankDiscount = 銀行割引。
46      }
 47  
48      パブリック 静的 クラスビルダー{
 49          プライベート整数BankID。
50          プライベート文字列bankName。
51          プライベート文字列bankCode。
52          民間のBigDecimal bankDiscount。
53  
54          公共Bank.Builder setBankId(整数bankId){
 55              この .bankId = bankId。
56              返す これを57          }
 58  
59          公衆Bank.Builder setBankName(文字列bankName){
 60              この .bankName = bankName。
61              戻り これを62          }
 63  
64          公衆Bank.Builder setBankCode(文字列bankCode){
 65              この .bankCode = bankCode。
66              返す これを67          }
 68  
69          公衆Bank.Builder setBankDiscount(BigDecimalをbankDiscount){
 70              この .bankDiscount = bankDiscount。
71              返す これを72          }
 73  
74          公的銀行ビルド(){
 75              リターン 新しい銀行(76          }
 77      }
 78  
79     @Override
 80個の     公共 ブール等しい(オブジェクトo){
 81          場合これは == O)戻り 82          もし(O == nullを!||はgetClass()= o.getClass())を返す 83          バンクBANK = (銀行)O。
84          リターン bankId.equals(bank.bankId)&&
 85                  bankCode.equals(bank.bankCode)。
86      }
 87  
88      @Override
 89      公衆 INT のhashCode(){
 90          リターンObjects.hash(bankId、bankCode)。
91      }
 92  
93      @Override
 94      パブリック文字列のtoString(){
 95          リターン "銀行{" +
 96                  "bankId =" + bankId +
 97                  "bankName = '" + bankName + '\'' +
 98                  」、bankCode = '」 + bankCode + '\'」+
 99                  "bankDiscount =" + bankDiscount +
 100                  '}' 101      }
 102  
103      パブリック銀行(ビルダービルダー){
 104          105          この .bankName = builder.bankName。
106          この .bankCode = builder.bankCode。
107          この .bankDiscount = builder.bankDiscount。
108      }
 109  
110      公共 静的 ボイドメイン(文字列[]引数){
 111          バンクBANK = 新しい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 }
コードの表示

概要

、我々はそれを忘れてはいけない、動的に構成機能、行動およびその他の構成パラメータを使用するときに非常に便利ですああ利用シナリオをモードを構築します。動的に構成、そしてあなたが考えることができ、このようなケースがあり、ああ、デフォルトの設定があるはずは、モデルを構築するために使用することができる人ではありません

おすすめ

転載: www.cnblogs.com/codewy/p/11536468.html