Note that there are some explanatory texts on larger screens.

plurals
  1. POMediator pattern example: chat
    primarykey
    data
    text
    <p>I read that chat is a sample of using of Mediator pattern. I wrote simple imitation of chat but I don't know how can I use mediator pattern in this situation. As I understand all my object already have loose coupling and Server class is similar to Mediator. Can someone show me using of Mediator pattern on my sample?</p> <pre><code>import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Observable; import java.util.Observer; import java.util.Random; import java.util.Timer; import java.util.TimerTask; public class Main1 { public static void main(String[] args) { final Server chatObserver = new Server(); chatObserver.addObserver(new Client("User1", chatObserver)); Timer t = new Timer(); t.schedule(new TimerTask() { @Override public void run() { chatObserver.addObserver(new Client("User2", chatObserver)); } }, 5); t.schedule(new TimerTask() { @Override public void run() { chatObserver.addObserver(new Client("User3", chatObserver)); } }, 10); } static class Client extends Observable implements Observer { private String name; private List&lt;Message&gt; chatHistoryToDisplay; private Timer timer = new Timer(); private Random random = new Random(); public Client(final String name, Observer o) { this.name = name; addObserver(o); chatHistoryToDisplay = new ArrayList&lt;Message&gt;(((Server) o).getChatHistory()); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { int msg = random.nextInt(10); String str = name + " writed " + msg; System.out.println("\t"+str); setChanged(); notifyObservers(new Message(name,String.valueOf(msg))); } }, 0, 10000); } @Override public void update(Observable o, Object msg) { chatHistoryToDisplay.add((Message) msg); System.out.println("----------- "+name+" screen -----------"); for (int i=0;i&lt;chatHistoryToDisplay.size();i++) { Message m = chatHistoryToDisplay.get(i); System.out.println(m.toString()); } } } static class Server extends Observable implements Observer { private List&lt;Message&gt; chatHistory = new ArrayList&lt;Message&gt;(); @Override public void update(Observable arg0, Object msg) { chatHistory.add((Message) msg); setChanged(); notifyObservers(msg); } public Collection&lt;Message&gt; getChatHistory(){ return chatHistory; } } static class Message { private String author; private String message; public Message(String author, String message) { this.author = author; this.message = message; } @Override public String toString() { return author + ": " + message; } } } </code></pre> <p><strong>CONSOLE:</strong></p> <pre><code>User1 writed 3 ----------- User1 screen ----------- User1: 3 User2 writed 9 ----------- User2 screen ----------- User1: 3 User2: 9 ----------- User1 screen ----------- User1: 3 User2: 9 User3 writed 9 ----------- User3 screen ----------- User1: 3 User2: 9 User3: 9 ----------- User2 screen ----------- User1: 3 User2: 9 User3: 9 ----------- User1 screen ----------- User1: 3 User2: 9 User3: 9 </code></pre> <p>and so on...</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload