0
からスーパークラスの変数を初期化するよりエレガントな方法について助言を求める:私はコードを下に書かれている以下のようなもののサブクラス
abstract class ZmqSubscriber {
protected String zmqPort, zmqIp, zmpTopic;
public void start() {
init();
// connect to zeroMQ with initialized zmq port, ip, topic and receive data
}
abstract protected void init();
}
abstract class Collector extends ZmqSubscriber {
@Override
protected void init() {
super.zmqIp = this.zmqIp;
super.zmqPort = this.zmqPort;
super.zmqTopic = this.zmqTopic;
}
public void otherMethod() { //blablabla }
}
class Syncronizer extends ZmqSubscriber() {
//blablabla
}
class SensorCollector extends Collector {
private String zmqPort, zmqIp, zmpTopic;
@Override
protected void init() {
//this.zmqIp, this.zmpPort, this.zmqTopic will be already initialized at this moment
super.zmqIp = this.zmqIp;
super.zmqPort = this.zmqPort;
super.zmqTopic = this.zmqTopic;
super.init();
}
// getters & setters for zmq port, ip, topic
}
class BeconCollector extends Collector {
// blablabla like SensorCollector
}
を私は間違いなく3レベルが延び必要と、このコードがうまく実行されています。 しかし、私は、スーパークラスのインスタンス変数(zmqPort、zmqIp、zmqTopic)をサブクラスで初期化する方法がエレガントではないと思います。なぜ私はその部分がエレガントではないと思うのか正確には言えませんが、私がコードを見ていると正しくないのでしょうか?おそらく、init()メソッドのコードが重複しているからです...
もっとエレガントなアーキテクチャをお考えですか?
おかげ
場合は、あなたが私たちの[コードレビュー](HTTPS上でそれを提出してください。 com /)姉妹サイト。 –
'init'とスーパー' init'は同じコードのようです –
@Scary Wombat申し訳ありません、私の前のコードには欠けていた部分がありましたが、今度はそれらを洗練しました。ありがとうございます –