デザインパターンやフレームワーク、イディオムなどを使用する際、どのクラスやメソッドがどの役割を果たしているのかってのを分かりやすくするためにアノテーションを使ってはどうか?と思い、チョット試してみました。
「アノテーションを読み込んで処理をする」ってなことをしようと思うと大変でしょうが、マーキングをするだけならそんなに難しくはありません。 ただ、実現の仕方を4つほど思いついたんですが、どれがベストなのかがチョット悩ましいところ。
- パッケージ・ベース
- enum ベース
- インターフェース・ベース
- クラス・ベース
それぞれを次回以降見ていきますが、パッケージ・ベースが一番素直な実装でしょうか。
今回は、次回以降にサンプルで用いるフレームワーク「サービスプロバイダーフレームワーク (service provider framework)」のコードを紹介。 おもいっきり『Effective Java 第2版 (The Java Series)』からサンプルを拝借してます。 訴えられるとマズイので、「皆さん、『Effective Java 第2版 (The Java Series)』を買いましょう!」と宣伝しておきます(笑)
// Effective Java 第2版 // 『項目1 コンストラクタの代わりに static ファクトリーメソッドを検討する』より // サービスプロバイダーフレームワークのスケッチ // サービスインターフェース public interface Service { ... // サービス固有のメソッドをここに } // サービスプロバイダーインターフェース public interface Provider { Service newService(); } // サービス登録とアクセスのためのインスタンス化不可能クラス public final class Services { private Services(){} // インスタンス化を抑制 // サービス名とサービスを対応づける private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>(); public static final String DEFAULT_PROVIDER_NAME = "<def>"; // プロバイダー登録 API public static void registrerDefaultProvider(Provider p){ registerProvider(DEFAULT_PROVIDER_NAME, p); } public static void registerProvider(String name, Provider p){ providers.put(name, p); } // サービスアクセス API public static Service newInstance(){ return newInstance(DEFAULT_PROVIDER_NAME); } public static Service newInstance(String name){ Provider p = providers.get(name); if(p == null) throw new IllegalArgumentException(); return p.newService(); } }
このフレームワークで出てくる役割は次の4つ:
- サービスインターフェース (@Service)
- サービスプロバイダーインターフェース (@Provider)
- プロバイダー登録 API (@ProviderRegistration)
- サービスアクセス API (@ServiceAccess)
Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
- 購入: 77人 クリック: 936回
- この商品を含むブログ (262件) を見る
川口耕介氏の新連載『やっぱりJavaがスキ!』がスタート↓
- 作者: 杉山貴章,羽生章洋,小飼弾,角田直行,橋本正徳,はまちや2,久末隆裕,Junio C Hamano,グニャラくん,やまだあきら,川口耕介,青木靖,鶴岡直也,長野雅広,森田創,伊藤直也,武者晶紀,ミック,高林哲,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2009/04/24
- メディア: 大型本
- 購入: 24人 クリック: 235回
- この商品を含むブログ (95件) を見る