JAvaビルダー設計モード
3941 ワード
コンストラクタ設計モードはジェネレータ設計モードとも呼ばれ、
Builderモードでは、製品の内部イメージと製品の生成プロセスを分割し、1つの構築プロセスに異なる内部を生成させます.
イメージの製品オブジェクト.構築モデルは、製品の内部イメージを独立して変化させることができ、お客様は製品の内部構成の詳細を知る必要はありません.建造モードは、ステップ別の建造プロセスを強制的に実行することができる.
複雑なオブジェクトのコンストラクションをその表現から分離し、同じコンストラクションプロセスで異なる表現を作成できるようにします.
今日、Imageloaderのソースコードを見ていると、その中にも建設者の設計モードが使われていて、まずセグメントコードを見ています.
製品の生成過程を分割する
表象はDisplayImageOptionsクラスのメンバー変数name,age
生産プロセスはBuilderのsetName()メソッドです.アクションアクションアクションを表します.setName()メソッドは所属クラス自体を返します.
public interface Builder { public void buildHead(); public void buildBody(); public void buildHand(); public void buildFoot();
public Person buildPerson(); }
Person.javaが作成した製品
public class Person { private String head; private String hand; private String body; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
PersonBuilder.java Personを作成する、いわゆる製品を作成するプロセス
public class PersonBuilder implements Builder{ Person person; public PersonBuilder(){ person = new Person(); } @Override public void buildHead() { person.setHead("build man's head!"); } @Override public void buildBody() { person.setBody("build man's body!"); } @Override public void buildHand() { person.setHand("build man's hand!"); } @Override public void buildFoot() { person.setFoot("build man's food!"); } @Override public Person buildPerson() { return person; } } PersonDirector.javaこれは本当に製品を作成しました
//作成の指揮 public Person ConstructPerson(Builder b) { b.buildFoot(); b.buildHand(); b.buildHead(); b.buildBody(); return b.buildPerson(); } テスト
public class BuilderDemo { public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person person = pd.ConstructPerson(new PersonBuilder()); System.out.println(person.getHead()); System.out.println(person.getBody()); System.out.println(person.getHand()); System.out.println(person.getFoot()); } }
Builderモードでは、製品の内部イメージと製品の生成プロセスを分割し、1つの構築プロセスに異なる内部を生成させます.
イメージの製品オブジェクト.構築モデルは、製品の内部イメージを独立して変化させることができ、お客様は製品の内部構成の詳細を知る必要はありません.建造モードは、ステップ別の建造プロセスを強制的に実行することができる.
複雑なオブジェクトのコンストラクションをその表現から分離し、同じコンストラクションプロセスで異なる表現を作成できるようにします.
今日、Imageloaderのソースコードを見ていると、その中にも建設者の設計モードが使われていて、まずセグメントコードを見ています.
DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true).cacheOnDisk(true)
.resetViewBeforeLoading(true).considerExifParams(false)
.bitmapConfig(Bitmap.Config.RGB_565).build();
DisplayImageOptionsコードが多すぎるので、簡単に抽出しました.public class DisplayImageOptions {
public String name;
public int age;
public DisplayImageOptions(Builder builder) {
super();
this.name = builder.name;
this.age = builder.age;
}
public static class Builder{
private String name;
private int age;
public Builder setName(String name){
this.name = name;
return this;
}
public Builder setAge(int age){
this.age = age;
return this;
}
public DisplayImageOptions build() {
return new DisplayImageOptions(this);
}
}
}
Test.java public class Test {
public static void main(String[] args) {
DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder().setName("zhouguizhi").setAge(22).build();
System.out.println("name="+displayImageOptions.name+"---------age="+displayImageOptions.age);
}
}
所謂表象和製品の生成過程を分割する
表象はDisplayImageOptionsクラスのメンバー変数name,age
生産プロセスはBuilderのsetName()メソッドです.アクションアクションアクションを表します.setName()メソッドは所属クラス自体を返します.
,
Builder.javaは作成された動作を表しますpublic interface Builder { public void buildHead(); public void buildBody(); public void buildHand(); public void buildFoot();
public Person buildPerson(); }
Person.javaが作成した製品
public class Person { private String head; private String hand; private String body; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
PersonBuilder.java Personを作成する、いわゆる製品を作成するプロセス
public class PersonBuilder implements Builder{ Person person; public PersonBuilder(){ person = new Person(); } @Override public void buildHead() { person.setHead("build man's head!"); } @Override public void buildBody() { person.setBody("build man's body!"); } @Override public void buildHand() { person.setHand("build man's hand!"); } @Override public void buildFoot() { person.setFoot("build man's food!"); } @Override public Person buildPerson() { return person; } } PersonDirector.javaこれは本当に製品を作成しました
//作成の指揮 public Person ConstructPerson(Builder b) { b.buildFoot(); b.buildHand(); b.buildHead(); b.buildBody(); return b.buildPerson(); } テスト
public class BuilderDemo { public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person person = pd.ConstructPerson(new PersonBuilder()); System.out.println(person.getHead()); System.out.println(person.getBody()); System.out.println(person.getHand()); System.out.println(person.getFoot()); } }