設計モード(13)ジェネレータモード(説明+応用)
2905 ワード
目次ジェネレータモード+ジェネレータモード を使用する理由適用例 ジェネレータモード
ジェネレータモード:(英:Builder Pattern)は設計モードであり、別名:構築モードであり、オブジェクト構築モードである.複雑なオブジェクトの構築プロセスを抽象化(抽象カテゴリ)し、この抽象プロセスの異なる実装方法で異なる表現(属性)のオブジェクトを構築することができる.
構築プロセス、すなわちクラス内のsetメソッドは、通常setメソッドによってクラス内のプロパティを一連の設定し、これらのプロパティを取得します.getメソッドによって取得されます.クラスが多い場合、setメソッドも多くなります.クラスの他のメソッドも追加されます.全体的に肥大化しているように見えますが、これらの複雑な設定手順を単独でクラスを構築し、そのクラスに対応する属性設定を行い、私たちの要求に従って元のクラスを構築します.もちろん、コードを簡潔にする観点から、機能的には工場モデルに似ています.異なるジェネレータによって、それぞれ異なるフィーチャーを持つオブジェクトが生成されます.しかし、これからお話しするAndroidのAlertDialogはこの点を体現していません.
インスタンスの適用
ジェネレータモードをよりよく理解するために、以下はウィキペディアからジェネレータモードについて説明する際に使用されるコードであり、そこからジェネレータモードのコード構造がわかりやすい.
しかしAndroidのBuilderはAlertDialogの内部クラスとしてAlertDialogのいくつかの属性の設定に使用され、内部クラスを通じてインスタンスを作成します.これにより、属性設定部分を構造パッケージに配置するだけで、後期のメンテナンスを容易にすることができます.
これでデザインモードでよく使われるモード解説学習の心得を共有し、JVMのシリーズ記事を展開するとともに、普段出会っている他のデザインモードなどに関するものを補足します.
ジェネレータモード:(英:Builder Pattern)は設計モードであり、別名:構築モードであり、オブジェクト構築モードである.複雑なオブジェクトの構築プロセスを抽象化(抽象カテゴリ)し、この抽象プロセスの異なる実装方法で異なる表現(属性)のオブジェクトを構築することができる.
構築プロセス、すなわちクラス内のsetメソッドは、通常setメソッドによってクラス内のプロパティを一連の設定し、これらのプロパティを取得します.getメソッドによって取得されます.クラスが多い場合、setメソッドも多くなります.クラスの他のメソッドも追加されます.全体的に肥大化しているように見えますが、これらの複雑な設定手順を単独でクラスを構築し、そのクラスに対応する属性設定を行い、私たちの要求に従って元のクラスを構築します.もちろん、コードを簡潔にする観点から、機能的には工場モデルに似ています.異なるジェネレータによって、それぞれ異なるフィーチャーを持つオブジェクトが生成されます.しかし、これからお話しするAndroidのAlertDialogはこの点を体現していません.
インスタンスの適用
ジェネレータモードをよりよく理解するために、以下はウィキペディアからジェネレータモードについて説明する際に使用されるコードであり、そこからジェネレータモードのコード構造がわかりやすい.
//Pizza
class Pizza {
private String dough = "";
private String sauce = "";
private String topping = "";
public void setDough (String dough) { this.dough = dough; }
public void setSauce (String sauce) { this.sauce = sauce; }
public void setTopping (String topping) { this.topping = topping; }
}
//pizza
abstract class PizzaBuilder {
protected Pizza pizza;
public Pizza getPizza() { return pizza; }
public void createNewPizzaProduct() { pizza = new Pizza(); }
public abstract void buildDough();
public abstract void buildSauce();
public abstract void buildTopping();
}
// pizza
class HawaiianPizzaBuilder extends PizzaBuilder {
public void buildDough() { pizza.setDough("cross"); }
public void buildSauce() { pizza.setSauce("mild"); }
public void buildTopping() { pizza.setTopping("ham+pineapple"); }
}
class SpicyPizzaBuilder extends PizzaBuilder {
public void buildDough() { pizza.setDough("pan baked"); }
public void buildSauce() { pizza.setSauce("hot"); }
public void buildTopping() { pizza.setTopping("pepperoni+salami"); }
}
// pizza
class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; }
public Pizza getPizza() { return pizzaBuilder.getPizza(); }
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
}
}
//
class BuilderExample {
public static void main(String[] args) {
Waiter waiter = new Waiter();
PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder();
PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder();
waiter.setPizzaBuilder ( hawaiian_pizzabuilder );
waiter.constructPizza();
Pizza pizza = waiter.getPizza();
}
}
しかしAndroidのBuilderはAlertDialogの内部クラスとしてAlertDialogのいくつかの属性の設定に使用され、内部クラスを通じてインスタンスを作成します.これにより、属性設定部分を構造パッケージに配置するだけで、後期のメンテナンスを容易にすることができます.
これでデザインモードでよく使われるモード解説学習の心得を共有し、JVMのシリーズ記事を展開するとともに、普段出会っている他のデザインモードなどに関するものを補足します.