コンストラクタモード(製品をカプセル化する構築プロセス)
4712 ワード
ソースアドレス
https://github.com/DingMouRen/DesignPattern
定義#テイギ#
コンストラクタモードでは、複雑なオブジェクトのコンストラクションをその表現から分離し、同じコンストラクションプロセスで異なる表現を作成できます.
シーンの操作同じ方法で、異なる実行順序で、異なるイベント結果が生成される. 当初はオブジェクトが開始され、必要なパラメータが比較的多い場合、デフォルト値を持つパラメータもあります.
くりを一つあげる
複雑なオブジェクトの構築に属する多くのパラメータを必要とする契約オブジェクトを作成します.
使用
まとめ
メリットは、クライアントが製品内部の構成の詳細を知る必要がないように、ビルダーモードによって良好にパッケージ化されている .構築者は独立しており、拡張しやすい.欠点 は余分なBuilderオブジェクトを生成し、メモリ を消費する.
以上のビルダーパターンはAndroidでよく使われていますが、一般的なビルダーパターンとは少し違います.
https://github.com/DingMouRen/DesignPattern
定義#テイギ#
コンストラクタモードでは、複雑なオブジェクトのコンストラクションをその表現から分離し、同じコンストラクションプロセスで異なる表現を作成できます.
シーンの操作
くりを一つあげる
複雑なオブジェクトの構築に属する多くのパラメータを必要とする契約オブジェクトを作成します.
/**
* Created by dingmouren on 2017/8/16.
* email:[email protected]
*
*/
public class InsuranceContract {
private String contractid;
private String personName;
private String companyName;
private long beginDate;
private long endDate;
private String otherData;
/**
* Builder
*
* @param builder
*/
private InsuranceContract(ConcreteBuilder builder) {
this.contractid = builder.getContractid();
this.personName = builder.getPersonName();
this.companyName = builder.getCompanyName();
this.beginDate = builder.getBeginDate();
this.endDate = builder.getEndDate();
this.otherData = builder.getOtherData();
}
/**
*
*/
public void showInfo() {
System.out.println(" :......");
}
/**
* Created by dingmouren on 2017/8/16.
* email:[email protected]
*
*/
public static class ConcreteBuilder {
private String contractid;
private String personName;
private String companyName;
private long beginDate;
private long endDate;
private String otherData;
/**
*
*
* @param contractid
* @param beginDate
* @param endDate
*/
public ConcreteBuilder(String contractid, long beginDate, long endDate) {
this.contractid = contractid;
this.beginDate = beginDate;
this.endDate = endDate;
}
// ,
public ConcreteBuilder setPersonName(String personName) {
this.personName = personName;
return this;
}
public ConcreteBuilder setCompanyName(String companyName) {
this.companyName = companyName;
return this;
}
public ConcreteBuilder setOtherData(String otherData) {
this.otherData = otherData;
return this;
}
/**
*
*
* @return
*/
public InsuranceContract build() {
//
if (contractid == null || contractid.trim().length() == 0) throw new IllegalArgumentException(" ");
// , build
boolean signPerson = personName != null && personName.trim().length() > 0;
boolean signCompany = companyName != null && companyName.trim().length() > 0;
if (signCompany && signPerson) throw new IllegalArgumentException(" ");
if (signCompany == false && signPerson == false) throw new IllegalArgumentException(" ");
if (beginDate <= 0) throw new IllegalArgumentException(" ");
if (endDate <= 0) throw new IllegalArgumentException(" ");
if (endDate <= beginDate) throw new IllegalArgumentException(" ");
return new InsuranceContract(this);
}
// getter , setter
public String getContractid() {
return contractid;
}
public String getPersonName() {
return personName;
}
public String getCompanyName() {
return companyName;
}
public long getBeginDate() {
return beginDate;
}
public long getEndDate() {
return endDate;
}
public String getOtherData() {
return otherData;
}
}
}
使用
public static void main(String[] args) {
InsuranceContract.ConcreteBuilder builder = new InsuranceContract.ConcreteBuilder("001",1100L,1199L);
InsuranceContract contract = builder.setCompanyName(" ")
.setPersonName(" ")
.setOtherData(" ")
.build();
contract.showInfo();//
}
まとめ
メリット
以上のビルダーパターンはAndroidでよく使われていますが、一般的なビルダーパターンとは少し違います.