這個(gè)模式一直沒(méi)有好好的理解。最近作IM 相關(guān)的應(yīng)用,才明白了。
就是兩個(gè)人之間要溝通,不是直接,而是通過(guò) mediator.
也就是 ,不是
        user1.sendMessage(user2,"some message");
       而是
        user1.getMediator().sendMessage("user2","some message");

 有什么好處呢:
        職責(zé)分離:mediator 完成自己該承擔(dān)的職責(zé)。
        mediator 也可以搞這搞那。

插一段實(shí)際代碼:
      conn.getChatManager().createChat("thewho@stephenli",new MessageListener() {

            public void processMessage(Chat chat, Message message) {
               
                if(logger.isDebugEnabled())
                logger.debug("Received message: " + message.toXML());
               
            }
        }).sendMessage("測(cè)試發(fā)送!");


下面是junit 一段別人的代碼,可以Run:

代碼看起來(lái)很蠢,不能說(shuō)明使用mediator 的好處。不過(guò)意思就是這樣啦!(從C# 拷的)


import junit.framework.TestCase;


public class MediatorTest extends TestCase {
   
    public void testMediator(){
        Mediator m = new Mediator();
        DataProviderColleague c1 = new DataProviderColleague(m);
        DataConsumerColleague c2 = new DataConsumerColleague();
        m.IntroduceColleagues(c1,c2);

        c1.ChangeData();
       
    }
}



    class Mediator
    {
        private DataProviderColleague dataProvider;
        private DataConsumerColleague dataConsumer;
        public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)
        {
            dataProvider = c1;
            dataConsumer = c2;           
        }
       
        public void DataChanged()
        {
            int i = dataProvider.getIMyData();
            dataConsumer.NewValue(i);
        }
    }

    class DataConsumerColleague
    {
        public void NewValue(int i)
        {
            System.out.println("New value "+ i);
        }
    }

    class DataProviderColleague
    {
        private Mediator mediator;
        private int iMyData=0;
        private int MyData ;
   
        public DataProviderColleague(Mediator m)
        {
            mediator = m;
        }

        public void ChangeData()
        {
            iMyData = 403;

            // Inform mediator that I have changed the data
            if (mediator != null)
                mediator.DataChanged();   
        }

        public int getIMyData() {
            return iMyData;
        }

        public void setIMyData(int myData) {
            iMyData = myData;
        }       
       
       
       
    }

 















西津渡