Я пытаюсь разобраться с методом посетителя в Java.
Я пытаюсь написать очень простую программу, чтобы привыкнуть к ней.В основном это меню еды.Я хочу прочитать в пользовательском вводе (тип еды (закуска, основное блюдо ...) и название еды (макароны, рыба ...)), а затем добавить этот пункт в меню.
IДо сих пор я уверен, что у меня правильный код, я просто пытаюсь понять, как передать значения, прочитанные пользователем.
Один из моих друзей, который также является программистом, сказал мне, что выдолжны иметь все ваши функциональные возможности в классах посетителей (или, по крайней мере, насколько это возможно).
Итак, я беру ввод пользователя и создаю его в элемент меню?Затем посетитель может добавить элемент в меню?(Я также хочу иметь возможность удалять элементы из меню, но я предполагаю, что это просто обратный инжиниринг метода добавления)
Или я не захожу так далеко, чтобы посетитель фактически добавилэлемент.Например;я просто создал бы элемент меню и затем передал бы его, затем имел бы функцию добавления в классе Menu?
Для меня было бы разумно, чтобы посетитель фактически добавил элемент, так как это функциональность, которую я хочуБудьте внимательны к добавляемому посетителю, но каждый раз, когда я пытаюсь реализовать, мне постоянно говорят, что я должен сделать массив, содержащий элементы меню, статичным, и я не могу не думать, что делаю это неправильно.
Я не уверен на 100%, что шаблон посетителя является правильным для того, что я пытаюсь сделать?
Лично я считаю, что я действительно очень близок ..... или ПУТЬOFF !!
Любая помощь, которую вы, ребята, можете предложить, была бы полезна, даже если вы можете указать мне хороший учебник, который поможет объяснить, как правильно использовать этот шаблон.
Вот что я имею до сих пор:
interface MenuElementVisitor {
void visit(Starter starter);
void visit(MainCourse mainCourse);
void visit(Desert desert);
void visit(Drinks drinks);
void visit(Menu menu);
}
Классы элементов меню
interface MenuElement {
void accept(MenuElementVisitor visitor); // MenuElements have to provide accept().
}
class Starter implements MenuElement {
private String name;
public Starter(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void accept(MenuElementVisitor visitor) {
visitor.visit(this);
}
}
class MainCourse implements MenuElement {
private String name;
public MainCourse(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void accept(MenuElementVisitor visitor) {
visitor.visit(this);
}
}
class Desert implements MenuElement {
private String name;
public Desert(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void accept(MenuElementVisitor visitor) {
visitor.visit(this);
}
}
class Drinks implements MenuElement {
private String name;
public Drinks(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void accept(MenuElementVisitor visitor) {
visitor.visit(this);
}
}
Класс меню
class Menu implements MenuElement {
MenuElement[] elements;
public MenuElement[] getElements() {
return elements.clone(); // Return a copy of the array of references.
}
public Menu() {
this.elements = new MenuElement[] {
new Starter("Soup"),
new Starter("Pate"),
new MainCourse("Steak"),
new MainCourse("Fish"),
new Desert("Ice Cream"),
new Desert("Apple Tart"),
new Drinks("7up"),
new Drinks("Wine"),
};
}
public void accept(MenuElementVisitor visitor) {
for(MenuElement element : this.getElements()) {
element.accept(visitor);
}
visitor.visit(this);
}
}
Посетитель для добавления элементов в меню
class MenuElementAddVisitor implements MenuElementVisitor {
System.out.println("Press 1 for Starter, 2 for Main Course, 3 for Desert or 4 for Drinks");
int MenuElementType = Console.readInt();
System.out.println("Type the name of the Menu Element you want to add");
String MenuElementName = Console.readString();
Посетитель для удаления элементов из меню
class MenuElementRemoveVisitor implements MenuElementVisitor {
}
Запустите демонстрационный код
public class VisitorDemo {
static public void main(String[] args) {
Menu menu = new Menu();
menu.accept(new MenuElementAddVisitor());
menu.accept(new MenuElementRemoveVisitor());
}
}