原文鏈接:http://www.hechunchen.info/?p=54
生活中的中介者非常常見(jiàn),比如維護世界和平的聯(lián)合國組織、房屋中介、出國中介。那么,設計模式中的中介者模式是怎么樣的呢?我們openfire中的群組聊天就是a typical example。我們用一個(gè)簡(jiǎn)化的群組聊天模型來(lái)說(shuō)明mediator(中介者)模式。
我們的考慮是這樣的,我們在用戶(hù)之間添加中介者——聊天室。這樣的話(huà),用戶(hù)之間的耦合度就會(huì )降低,而且不需要相互引用。它們只需獨立地跟中介者交互即可。 結構圖如下: 
下面貼上關(guān)鍵代碼。 接口IChatroom.java:
package mediator;public interface IChatroom{ void forward(User from, User to, String message);} |
Chatroom.java:
package mediator;public class Chatroom implements IChatroom{ @Override public void forward(User from, User to, String message) { // TODO Auto-generated method stub if(to!=null) { to.receive(from, message); } }} |
抽象類(lèi)User.java:
package mediator;public abstract class User{ IChatroom room; public User(IChatroom room) { this.room = room; } public abstract void send(User to, String message); public abstract void receive(User from, String message);} |
MaleUser.java:
package mediator;public class MaleUser extends User{ public MaleUser(IChatroom room) { super(room); // TODO Auto-generated constructor stub } @Override public void receive(User from, String message) { // TODO Auto-generated method stub System.out.println("帥哥我收到了:" + message); } @Override public void send(User to, String message) { // TODO Auto-generated method stub room.forward(this, to, message); }} |
FemaleUser.java:
package mediator;public class FemaleUser extends User{ public FemaleUser(IChatroom room) { super(room); // TODO Auto-generated constructor stub } @Override public void receive(User from, String message) { // TODO Auto-generated method stub System.out.println("美女我收到了:" + message); } @Override public void send(User to, String message) { // TODO Auto-generated method stub room.forward(this, to, message); }} |
測試類(lèi)TestClient.java:
package mediator;public class TestClient{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub IChatroom room = new Chatroom(); FemaleUser hcc = new FemaleUser(room); MaleUser fq = new MaleUser(room); MaleUser gq = new MaleUser(room); MaleUser lp = new MaleUser(room); //男給男發(fā)消息 gq.send(fq, "吃飯了沒(méi)?"); //男給女發(fā)消息 lp.send(hcc, "我也沒(méi)吃飯"); }} |
總結一下,Mediator改變了原來(lái)兩個(gè)對象的耦合方式。
聯(lián)系客服