diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/Listing1018.java')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/examples/Listing1018.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/Listing1018.java b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1018.java new file mode 100644 index 0000000..8613621 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/examples/Listing1018.java @@ -0,0 +1,106 @@ +/* Listing1018.java */
+
+interface MenuVisitor
+{
+ abstract void visitMenuEntry(MenuEntry2 entry);
+ abstract void visitMenuStarted(Menu2 menu);
+ abstract void visitMenuEnded(Menu2 menu);
+}
+
+class MenuEntry2
+{
+ protected String name;
+
+ public MenuEntry2(String name)
+ {
+ this.name = name;
+ }
+
+ public String toString()
+ {
+ return name;
+ }
+
+ public void accept(MenuVisitor visitor)
+ {
+ visitor.visitMenuEntry(this);
+ }
+}
+
+class Menu2
+extends MenuEntry2
+{
+ MenuEntry2[] entries;
+ int entryCnt;
+
+ public Menu2(String name, int maxElements)
+ {
+ super(name);
+ this.entries = new MenuEntry2[maxElements];
+ entryCnt = 0;
+ }
+
+ public void add(MenuEntry2 entry)
+ {
+ entries[entryCnt++] = entry;
+ }
+
+ public String toString()
+ {
+ String ret = "(";
+ for (int i = 0; i < entryCnt; ++i) {
+ ret += (i != 0 ? "," : "") + entries[i].toString();
+ }
+ return ret + ")";
+ }
+
+ public void accept(MenuVisitor visitor)
+ {
+ visitor.visitMenuStarted(this);
+ for (int i = 0; i < entryCnt; ++i) {
+ entries[i].accept(visitor);
+ }
+ visitor.visitMenuEnded(this);
+ }
+}
+
+class MenuPrintVisitor
+implements MenuVisitor
+{
+ String indent = "";
+
+ public void visitMenuEntry(MenuEntry2 entry)
+ {
+ System.out.println(indent + entry.name);
+ }
+
+ public void visitMenuStarted(Menu2 menu)
+ {
+ System.out.println(indent + menu.name);
+ indent += " ";
+ }
+
+ public void visitMenuEnded(Menu2 menu)
+ {
+ indent = indent.substring(1);
+ }
+}
+
+public class Listing1018
+{
+ public static void main(String[] args)
+ {
+ Menu2 filemenu = new Menu2("Datei", 5);
+ filemenu.add(new MenuEntry2("Neu"));
+ filemenu.add(new MenuEntry2("Laden"));
+ filemenu.add(new MenuEntry2("Speichern"));
+ Menu2 confmenu = new Menu2("Konfiguration", 3);
+ confmenu.add(new MenuEntry2("Farben"));
+ confmenu.add(new MenuEntry2("Fenster"));
+ confmenu.add(new MenuEntry2("Pfade"));
+ filemenu.add(confmenu);
+ filemenu.add(new MenuEntry2("Beenden"));
+
+ filemenu.accept(new MenuPrintVisitor());
+ }
+}
\ No newline at end of file |
