//
Purpose.?Mediator and Observer demo
//
// Observer -
// 1. Sender is coupled to a Receiver interface
//
2. Receivers register with Sender
// 3. Sender broadcasts to all
Receivers
//
// Mediator -
// 4. Mediator implements Receiver
interface
// 5. Mediator registers with Senders
// 6. Receivers
register with Mediator
// 7. Senders send to Mediator
// 8. Mediator
sends to Receivers
import java.awt.*;
import
java.awt.event.*;
public class MediatorObserverDemo {
牋 static final int ODD = 1, EVEN = 2, THRE =
3;
牋 interface Observer {
public void update( String s ); }
牋
static class Mediator extends FrameClose implements ActionListener { //
4 \\
牋牋?private Observer[] odd =
new Observer[2], even = new Observer[2], // 1 \\
牋牋牋牋 thre = new Observer[2];
牋牋?private int numO = 0, numE = 0, numT =
0;
牋牋?public Mediator( String
str ) { super( str ); }
牋牋?
public void register( Observer o, int type ) {
牋牋牋牋 if (type == ODD)牋牋牋 odd[numO++]?= o;
牋牋牋牋 else if
(type == EVEN) even[numE++] = o;
牋牋牋牋
else if (type == THRE) thre[numT++] = o;
牋牋?}
牋牋?public
void actionPerformed( ActionEvent e ) {
牋牋牋牋 if (Integer.parseInt(e.getActionCommand()) % 2 == 1)牋牋牋牋 // 3,8 \\
牋牋牋牋牋?for (int i=0; i < numO; i++)
odd[i].update( e.getActionCommand() );
牋牋牋牋 else if (Integer.parseInt(e.getActionCommand()) % 2 ==
0)
牋牋牋牋牋?for (int i=0; i <
numE; i++) even[i].update( e.getActionCommand() );
牋牋牋牋 if
(Integer.parseInt(e.getActionCommand()) % 3 == 0)
牋牋牋牋牋?for (int i=0; i < numT; i++)
thre[i].update( e.getActionCommand() );
牋
}?}
牋 static class Subscriber extends TextArea
implements Observer {
牋牋?public
void update( String s ) { append( s + '\n' ); } }
牋 public static void main( String[] args )
{
牋牋?Mediator牋 mediator = new Mediator(
"MediatorObserverDemo" );
牋牋?
Subscriber sub;
牋牋?
Panel top = new Panel();
牋牋?
Button btn;
牋牋?for (int
i=1; i < 10; i++) {
牋牋牋牋 btn
= new Button( "" + i );
牋牋牋牋
btn.addActionListener( mediator );牋牋牋牋牋牋牋牋?牋牋牋牋?/span>// 5,7 \\
牋牋牋牋
top.add( btn ); }
牋牋?
Panel center = new Panel();
牋牋?
center.setLayout( new GridLayout( 1, 3 ) );牋牋牋牋牋牋牋牋牋牋 // 2,6 \\
牋牋?sub = new Subscriber(); center.add( sub ); mediator.register(
sub, ODD );
牋牋?sub = new
Subscriber(); center.add( sub ); mediator.register( sub, EVEN );
牋牋?sub = new Subscriber(); center.add( sub
); mediator.register( sub, THRE );
牋牋?mediator.add( top, BorderLayout.NORTH );
牋牋?mediator.add( center,
BorderLayout.CENTER );
牋牋?mediator.setSize(
250, 200 );
牋牋?
mediator.setVisible( true );
}?
}