私は精神的なループに陥っているか、少なくともオブザーバー パターンの実装方法を理解していません。私の意図したController
実装は、文字通り、それが制御するインスタンスを文字通り観察することを意図しているObserver
ためです。
観測されたオブジェクトは、文字どおり によって観測されることを意図しているObservable
ため、拡張されますController
。何を呼び出す.addObserver(responseHandler);
のですか?別のクラスがオブザーバーをインスタンスに追加し、文字通り「オブザーバー」インターフェースを実装しますか? それは正しくありません。
-----編集----- responseHandler は、不明なコントローラーの総称です。
余談ですが、Java で実装されているこのパターンには名前付けの問題がありますか、それとも私の理解不足ですか?
コントローラのコントローラにモーフィングされたコントローラは次のとおりです。
public class MetaController implements Observer {
private final static Logger LOG = Logger.getLogger(MetaController.class.getName());
private Printer telnetPrinter = new Printer();
private telnetDataProcessor telnetDataProcessor = new telnetDataProcessor();
private StringReader stringReader = new StringReader();
private final ConcurrentLinkedQueue<Character> telnetData = new ConcurrentLinkedQueue();
public MetaController() {
}
//the printer and processor each spawn their own thread so that they don't
//block each other waiting for each other
public void readPrintParse(final InputStream inputStream) throws SocketException, IOException {
telnetPrinter.print(inputStream, telnetData); //populate telnetData in its own thread
telnetDataProcessor.read(telnetData); //process telnetData in its own thread
}
//the StringReader just looks for particular keywords like "press enter to continue"
//so that some phrases will trigger a response
//commands may also be typed manually by the user (not implemented yet)
@Override
public void update(Observable o, Object arg) {
//when telnetDataProcessor sends a String, send that String on to stringReader
String cmd = stringReader.parse(null); //parse what and how?
//send the command string back to the telnetClient
}
}
残念ながら、 APIを直接読むことは、私には分かりません。
WeatherTelnet
これは Apache の例の拡張であり、単純なMUD クライアントに対してスクリプト化された telnet とライブ telnet 応答を同時に実行できるようにする一種の貧弱な Netty であり、終端されていない telnet データ ストリームのライブ処理と、ライブ出力とユーザー入力。