Adapter patternは、このような状況に適していますが、使用例では完全に後であるとは限りません。しかし、それは正しいことを知る価値のあるパターンであり、あなたを正しい方向に向けるかもしれません。
意図は、クライアントが期待する別のインターフェイスへのクラスのインタフェースを変換します。アダプタは、クラスが連携して、互換性のないインタフェースが原因でできなかったことを可能にします。
例
ので、ターゲット・インタフェースを考えるあなたがプログラムしたい1、すなわち:
public interface IMyBasicBolt {
void prepare(Map<String, Object> stormConf, String other);
}
(注:私は簡単にするためString
でTopologyContext
を交換した)
あなたはターゲットインターフェイスを実装するアダプタクラスを作成し、その動作(コンポジション)をIBoltBasic
の実装に委譲できます。アダプタBasicBoltAdapter
の
public class BasicBoltAdapter implements IMyBasicBolt {
private IBasicBolt basicBolt;
public BasicBoltAdapter(IBasicBolt basicBolt) {
this.basicBolt = basicBolt;
}
@Override
public void prepare(Map<String, Object> stormConf, String other) {
basicBolt.prepare(stormConf, other);
}
}
使用例:
IBasicBolt basicBolt = new IBasicBolt() {
@Override
public void prepare(Map stormConf, String other) {
System.out.println(stormConf.toString() + " " + other);
}
};
Map<String, Object> map = new HashMap<>();
map.put("MapKeyTest", new Object());
IMyBasicBolt myBasicBolt = new BasicBoltAdapter(basicBolt);
myBasicBolt.prepare(map, "Test");
あなたのケースではインターフェースIMyBasicBolt
(ターゲット・インタフェース)の必要性は厳密にありません。しかし、可能であればインターフェースにプログラムするのが一般に良いです。