AS3でデザインパターンその4「FactoryMethod」
このFactoryMethodも、昨日のテンプレートパターンと同じく抽象クラスをスーパークラスとして使い、実際にインスタンスを生成するのはサブクラスで行う。
TempleteMethodでは抽象クラスはひとつしかなかったけど、今回は二つでそれらは別々のPackage内にまとめられている。
FrameWorkパッケージと、肉付けするidCardパッケージ。
今回の例ではIDカードを作るためのidCardパッケージを用いますが、仮にテレビを作るとすると、Televisionパッケージを使います。ここで重要なのは、変更するのはidCardパッケージだけで、FrameWorkパッケージ内のクラスは一切変更する必要がないということ。
・Productクラスには、のちにサブクラスで作られるインスタンスのふるまいとなるメソッドを、抽象メソッドとして定義してある。(なので実際の処理は書かない)
・Factoryクラスには、あとでサブクラスからインスタンスを作るためのふるまいとなる抽象メソッドを定義する。その処理は、Productのインスタンスを生成するというもの。
次に、サブクラスの説明。
idCardパッケージは、フレームワーク側のProductクラスを継承したクラスと、Factoryクラスを継承したクラスの二つで成り立っている。
継承しているメソッドはいずれも抽象クラスをので、サブクラス上で必ず実装しなければならなくなる。
・Factoryクラスを継承したサブクラスIDCardFactoryは、インスタンスを作り、抽象クラスでもあったregisterProductでカードを登録できる。
・Productクラスを継承したサブクラスIDCardは、コンストラクタ関数でインスタンスを作り、抽象クラスから継承したuseメソッドでふるまいを実行する。
と、ここまで書いて実際にコードを書かないと、と思ったので、コード書きます。
追記(2008.11.19)
JAVA版のFactoryMethodパターンをAS3版に移植してみました。
しかし、謎のコンパイルエラー。。原因わからないんですが、とりあえずあげときます。