-FactoryFactory
ファクトリのファクトリを定義。JSFでそうなってるのですが、主要サービスオブジェクトをチェーンして設定するようにするように実装中(一応、今のSVNの未完成状態でもこの機能以外は普通動作します)。
public class MyCycleFactory implements CycleFactory { private CycleFactory _beforeFactory; public MyCycleFactory(CycleFactory beforeFactory) { _beforeFactory = beforeFactory; } public void initialize(Object req, Object res) { // たとえば独自の実装を行う } public ServiceCycle getServiceCycle() { // チェーンの前のものを使う return _beforeFactory.getServiceCycle(); } }
上記のような、自分が実装しているインターフェイス型の引数をとるコンストラクタがあれば、そこに優先順位の低いファクトリを生成して渡してくるという仕組みです。引数をとらない、もしくはデフォルトコンストラクタのみであればチェーンの前のものは参照しません。JSFでこういう仕組みを見て、可搬性が高いと思ったので考えにアレンジは加えて良いと思う方向に変化させつつも採用しました。
JSF以前にこういうアイディアがあったのかは知りませんが、いいんじゃないかなと思います。オブジェクトの継承によるカスタマイズではなく再帰的なデリゲーションを利用したもので、発展の余地があるんじゃないかと思います。