01
02
03
04
05
06
07
08
09
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
|
package horstmann.ch05_invoice;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
An invoice for a sale, consisting of line items.
*/
public class Invoice
{
/**
Constructs a blank invoice.
*/
public Invoice()
{
items = new ArrayList<LineItem>();
listeners = new ArrayList<ChangeListener>();
}
/**
Adds an item to the invoice.
@param item the item to add
*/
public void addItem(LineItem item)
{
items.add(item);
// Notify all observers of the change to the invoice
ChangeEvent event = new ChangeEvent(this);
for (ChangeListener listener : listeners)
listener.stateChanged(event);
}
/**
Adds a change listener to the invoice.
@param listener the change listener to add
*/
public void addChangeListener(ChangeListener listener)
{
listeners.add(listener);
}
/**
Gets an iterator that iterates through the items.
@return an iterator for the items
*/
public Iterator<LineItem> getItems()
{
return new
Iterator<LineItem>()
{
public boolean hasNext()
{
return current < items.size();
}
public LineItem next()
{
return items.get(current++);
}
public void remove()
{
throw new UnsupportedOperationException();
}
private int current = 0;
};
}
public String format(InvoiceFormatter formatter)
{
String r = formatter.formatHeader();
Iterator<LineItem>iter = getItems();
while (iter.hasNext())
r += formatter.formatLineItem(iter.next());
return r + formatter.formatFooter();
}
private ArrayList<LineItem> items;
private ArrayList<ChangeListener> listeners;
}
|