スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Factory Methodパターン

Factory Methodパターン

インスタンス生成の工場。
構成としてはTemplate Methodパターンを利用している。
すなわち、スーパークラスで処理の枠組みを記述して、
具体的な肉付けはサブクラスで行う。

まず、抽象クラスで、工場とはcreateメソッドでSingerクラスのインスタンスを
生成するものと規定している。要するに処理の枠組みを決めている。
実際の実装はサブクラスに任せる。


package framework;

public abstract class Factory {
public final Singer create(String name){
Singer singer = createSinger(name);
registerSinger(singer);
return singer;
}
protected abstract Singer createSinger(String name);
protected abstract void registerSinger(Singer singer);
}


これも抽象クラス。

package framework;

public abstract class Singer {
public abstract void sing();
}


サブクラスでは、実際にcreateSingerを実装しています。

package jpop;

import java.util.ArrayList;
import java.util.List;

import framework.Factory;
import framework.Singer;

public class JpopSingerFactory extends Factory {

private List singers = new ArrayList();
@Override
protected Singer createSinger(String name) {
return new JpopSinger(name);
}

@Override
protected void registerSinger(Singer singer) {
singers.add((((JpopSinger)singer).getName()));
}
}





package jpop;

import framework.Singer;

public class JpopSinger extends Singer {

private String name;

public JpopSinger(String name) {
this.name = name;
}

@Override
public void sing() {
System.out.println(this.name + "です。歌います。");
}

public String getName() {
return name;
}

}


実行例はこんな感じ。

import jpop.JpopSingerFactory;
import framework.Factory;
import framework.Singer;

public class Main {
public static void main(String[] args){
Factory factory = new JpopSingerFactory();
Singer singer1 = factory.create("Ayaka");
Singer singer2 = factory.create("EXILE");
Singer singer3 = factory.create("大塚愛");

singer1.sing();
singer2.sing();
singer3.sing();
}
}


Factory Methodパターンを使用することで、以下のようなメリットがあると考えられる。
①サブクラスがおんなじインタフェースで統一できる。createSingerを呼べばよいんだな、と一目でわかる。
②拡張が簡単になる。たとえば、新たに演歌歌手を生成したい場合には、それぞれ対応するサブクラスを作って
やるだけでよい。サブクラスの修正、新規作成の影響がスーパークラスに及ぶことはない。
スポンサーサイト
プロフィール

tjnet777

Author:tjnet777
Solaris, VPNのサポート業務を1年

金融系SIerで業務アプリの開発、メンテを3年半

離職して大学院大学 1年生

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。