私は、Java をブラッシュアップする練習として小さなコンソール アプリケーションを作成しています (昨年は Java を 1 年間使用した後、Haskell と Scala を使用していました)。メニューの動作をモデリングする次のインターフェイスがあります。
public interface MenuItem {
public String output();
public InputHandler requestInput();
と:
public interface InputHandler {
public String promptUser();
public MenuItem handleInput(String input);
}
次のようないくつかのサンプル実装を使用します。
public class MainMenu implements MenuItem {
public String output() {
return "1.) Browse Books\n" +
"2.) View membership details\n" +
"3.) Exit\n";
}
public InputHandler requestInput() {
return new InputHandler() {
public String promptUser() {
return "Please select an option:\n";
}
public MenuItem handleInput(String input) {
int menuItem = Integer.parseInt(input);
if (menuItem == 1) {
return new BrowseBooks();
} else if (menuItem == 2) {
return new ViewUserDetails();
} else {
return new MainMenu();
}
}
};
}
}
私の問題は、これらのMenuItem実装クラスの一部 (BrowseBooksMenu
たとえば、) が他のクラス (つまりLibraryManager
、本の借用を処理するクラス) へのアクセスを必要とすることです。LibraryManager
このクラスをクラスに渡すことはできません。クラスBrowseBooks
にも渡す必要があるMainMenu
ため (それらは一種の循環であるため)、特定の MenuItem でのみ使用されるインスタンスの大きなコンストラクターの大きな混乱になります。
これを解決する良い方法は何ですか?