倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

FactoryBuilderSupport よ、我に力を! (5) : AbstractFactory クラスの onXxxx() メソッド

前回の isXxxx() メソッドに引き続き、今回は AbstractFactory クラスの onXxxx() メソッドを見ていきます。 onXxxx() メソッドは(気持ち的には)イベント・ハンドラのようなメソッドで、ビルダー設定時やビルド時に起こるイベントに対して処理を記述します。 ただし、イベント・ハンドラと言っても Griffon のように独自のイベントを起こしたりすることはできなくて、onXxxx() メソッドの呼ばれる順序は FactoryBuilderSupport によって定められています。 従って、独自の Factory クラスを実装する際には、ある程度 onXxxx() メソッドの呼ばれる順序を把握しておく方がよいでしょう。

onXxxx() メソッド


Factory インターフェースに定義されている onXxxx() メソッドには以下のようなものがあります:

メソッド 説明
onFactoryRegistration() FactoryBuilderSupport オブジェクトに Factory オブジェクトが登録されたときに呼ばれる
onHandleNodeAttributes() ノードの属性を処理する際に呼ばれる(子ノードの処理の前)
onNodeChildren() 子ノードを処理する際に呼ばれる
onNodeCompleted() 子ノードが構築された後に呼ばれる

onXxxx() メソッドの呼ばれる順序


onXxxx() メソッドの呼ばれる順序は把握しておく方がよいでしょう。 onXxxx() メソッドに加えて、isXxxx() メソッドや setParent() / setChild() メソッドも一緒に載せてます:

  • ビルダー設定時
    1. onFactoryRegistration()
  • ビルド時
    1. newInstance()
    2. onHandleNodeAttributes()
    3. setParent()
    4. (親ノードの setChild())
    5. isLeaf() == true なら
      1. isHandlesNodeChildren() == true なら onNodeChildren()
      2. (子ノードの setParent())
      3. setChild()
    6. onNodeCompleted()

最初、setParent() の呼び出し順を間違えてました(修正済) 
前回も書きましたが、isHandlesNodeChildren() が false を返すと onNodeChildren() メソッドは呼ばれません。 ただし、子ノードの構築は行われます。

Groovy for Domain-specific Languages

Groovy for Domain-specific Languages


Beginning Netbeans” Ide for Groovy, Grails and Griffon

Beginning Netbeans” Ide for Groovy, Grails and Griffon