我正在构建一个小型控制台应用程序作为复习 Java 的练习(在 Java 学习一年之后,去年一直在做 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
类中(因为它们是循环的),因此对于仅在特定 MenuItems 中使用的实例而言,它会成为大型构造函数的大风暴。
解决这个问题的好方法是什么?