forked from john-bai/DesignPatterns
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommand.java
More file actions
130 lines (104 loc) · 2.17 KB
/
Copy pathCommand.java
File metadata and controls
130 lines (104 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package designpatterns;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author jtherrell
*/
class Application {
private List<Document> docs;
private int currentDocIndex;
private Menu menu;
private Log log;
public Application(Log log) {
docs = new ArrayList<Document>();
currentDocIndex = -1;
this.log = log;
}
public void addMenu(Menu menu) {
this.menu = menu;
}
public void addDocument(Document doc) {
log.append(doc.filename() + " opened...");
docs.add(doc);
currentDocIndex = docs.indexOf(doc);
}
public Document currentDoc() {
if (currentDocIndex < 0 || currentDocIndex >= docs.size()) {
return null;
}
log.append("Paste to " + docs.get(currentDocIndex).filename());
return docs.get(currentDocIndex);
}
}
/*
*/
interface Command {
public void execute();
}
/*
*/
class OpenCommand implements Command {
private Application target;
public OpenCommand(Application app) {
target = app;
}
public void execute() {
String name = askUser();
if(name != null) {
Document doc = new Document(name);
target.addDocument(doc);
doc.open();
}
}
public String askUser() {
// Pretend we prompt the user for the filename
return "./untitled.txt";
}
}
class PasteCommand implements Command {
private Application target;
public PasteCommand(Application target) {
this.target = target;
}
public void execute() {
target.currentDoc().paste();
}
}
class Menu {
private List<MenuItem> menuItems;
public Menu() {
menuItems = new ArrayList<MenuItem>();
}
public void addMenuItem(MenuItem menuItem) {
if (menuItem != null)
menuItems.add(menuItem);
}
}
class MenuItem {
private String label;
private Command command;
public MenuItem(String label, Command command) {
this.label = label;
this.command = command;
}
public void clicked() {
command.execute();
}
}
class Document {
private String filename;
public Document(String filename) {
this.filename = filename;
}
public String filename() {
return filename;
}
public void read() {}
public void open() {}
public void paste() {}
}