您的位置:首页 > 其它

设计模式(十五)------23种设计模式(7):中介者模式

2017-12-12 11:03 441 查看





使用频率:★★★☆☆



一、什么是中介者模式

对象之间通过中介者对象进行交互,而不是直接交互;


二、补充说明

对紧密关联的各个对象解耦;
典型例子:QQ群,聊天室;


三、角色

抽象中介者
具体中介者
抽象对象
具体对象


四、例子,JAVA实现

例子说明,一个网络聊天室
抽象中介者

package com.pichen.dp.behavioralpattern.mediator;

import java.util.ArrayList;
import java.util.List;

public abstract class Mediator {

protected List<User> userList;
public Mediator() {
userList = new ArrayList<User>();
}
public void addUser(User user){
user.setMediator(this);
this.userList.add(user);
}

public abstract void operation(User user, String msg);
}


具体中介者

package com.pichen.dp.behavioralpattern.mediator;
public class ChatRoomMediator extends Mediator {

@Override
public void operation(User user, String msg) {
System.out.println(user.getName() + "send a msg : " + msg);
for(User userTmp : this.userList){
userTmp.getMessage(msg);
}
}
}


抽象对象

package com.pichen.dp.behavioralpattern.mediator;

public abstract class User {
protected Mediator mediator;

protected String name;

public User(String name) {
this.name = name;
}

protected void setMediator(Mediator mediator){
this.mediator = mediator;
}
protected abstract void sendMessage(String msg);

protected abstract void getMessage(String msg);
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


具体对象

package com.pichen.dp.behavioralpattern.mediator;
public class CommonUser extends User{

public CommonUser(String name) {
super(name);
}
@Override
protected void sendMessage(String msg) {
this.mediator.operation(this, msg);
}

@Override
protected void getMessage(String msg) {
System.out.println(this.getName() +  " get msg:"+msg);
}

}


package com.pichen.dp.behavioralpattern.mediator;
public class VIPUser extends User{
public VIPUser(String name) {
super(name);
}

@Override
protected void sendMessage(String msg) {
this.mediator.operation(this, msg);
}

@Override
protected void getMessage(String msg) {
System.out.println(this.getName() + " get msg:"+msg);
}

}


客户端

package com.pichen.dp.behavioralpattern.mediator;
public class Main {

public static void main(String[] args) {
CommonUser user1 = new CommonUser("小王");
CommonUser user2 = new CommonUser("小陈");
VIPUser vipUser = new VIPUser("小张");

Mediator chatRoom = new ChatRoomMediator();
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(vipUser);

user2.sendMessage("hello everybody~");

}
}


执行结果

小陈send a msg : hello everybody~
小王 get msg:hello everybody~
小陈 get msg:hello everybody~
小张 get msg:hello everybody~


 

@Author      风一样的码农

@HomePageUrl http://www.cnblogs.com/chenpi/ 

@Copyright      转载请注明出处,谢谢~ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: