設計モード(13)ジェネレータモード(説明+応用)


目次
  • ジェネレータモード+ジェネレータモード
  • を使用する理由
  • 適用例
  • ジェネレータモード
    ジェネレータモード:(英: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のシリーズ記事を展開するとともに、普段出会っている他のデザインモードなどに関するものを補足します.