设计模式之中介模式
来源:互联网 发布:东芝复印机网络店 编辑:程序博客网 时间:2024/06/10 13:04
用一个中介对象来封装一系列对象之间的交互,使各个对象中不需要显式地
引用其他对象实例,从而降低对象之间的耦合度,并且可以独立地改变对象
之间的交互关系。中介拥有各个对象的引用,对象与对象通信通过中介的转达。
遵循原则:
集中控制,提高类的复用性;
将一对多的复杂关系转换成一对一的简单关系。
使用场合:
(1)一组定义良好的对象,现在要进行复杂的通信。
(2)定制一个分布在多个类中的行为,而又不想生成太多的子类。
知识扩展:
JDK中的ButtonGroup即是中介者模式,另外QQ的聊天室亦是。
public interface IMediator {
public void rigester(IUser user);
public void notifyMessage(IUser from);
}
public class ConcreteMediator implements IMediator {
private final List<IUser> list = new ArrayList<IUser>();
@Override
public void notifyMessage(IUser from) {
Iterator<IUser> itr = list.iterator();
IUser tempUser = null;
while (itr.hasNext()) {
tempUser = itr.next();
if(tempUser!=null && !tempUser.equals(from)){
tempUser.receiveMessage(from.getMessage());
}
}
}
@Override
public void rigester(IUser user) {
if(user!=null && !list.contains(user)){
list.add(user);
}
}
}
public interface IUser {
public void receiveMessage(String message);
public void sendMessage(String message);
public String getMessage();
}
public abstract class AbstractUser implements IUser {
protected IMediator mediator;
protected String name;
protected String message;
public AbstractUser(IMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
@Override
public String getMessage() {
// TODO Auto-generated method stub
return this.message;
}
@Override
public void sendMessage(String message) {
this.message = message;
System.out.println(this.name+"说:"+message);
mediator.notifyMessage(this);
}
}
public class UserAAA extends AbstractUser {
public UserAAA(IMediator mediator, String name) {
super(mediator, name);
mediator.rigester(this);
}
@Override
public void receiveMessage(String message) {
System.out.println("用户AAA接收到消息:"+message);
}
}
public class UserBBB extends AbstractUser {
public UserBBB(IMediator mediator, String name) {
super(mediator, name);
mediator.rigester(this);
}
@Override
public void receiveMessage(String message) {
System.out.println("用户BBB接收到消息:"+message);
}
}
public class UserCCC extends AbstractUser {
public UserCCC(IMediator mediator, String name) {
super(mediator, name);
mediator.rigester(this);
}
@Override
public void receiveMessage(String message) {
System.out.println("用户CCC接收到消息:"+message);
}
}
测试
public class Client {
public static void main(String[] args) {
IMediator mediator = new ConcreteMediator();
IUser userA = new UserAAA(mediator, "用户AAA");
IUser userB = new UserBBB(mediator, "用户BBB");
IUser userC = new UserCCC(mediator, "用户CCC");
System.out.println("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");
userA.sendMessage("大家好,我是张三,请多多关照");
System.out.println("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");
userB.sendMessage("你好,我是李四,欢迎你");
System.out.println("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");
userC.sendMessage("嘿,你们都在干嘛呢");
}
}
- 设计模式之中介模式
- 设计模式之中介模式
- 设计模式之中介者
- 设计模式 之 中介者
- 设计模式之中介者
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式
- 我学设计模式 之 中介模式
- 设计模式之中介者模式
- 八 设计模式之中介者模式
- 设计模式之--中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之-中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式
- c++ vector 需要注意的地方
- 一步一步建立一个二叉树
- sso跨域写cookie的一段js脚本
- nginx区分手机与电脑浏览器并进入相应站点
- Shell教程(六):函数、联机帮助
- 设计模式之中介模式
- C#怎么调用SQL Server的存储过程
- 指针数组和数组指针的详细解答
- Android blueZ HCI(二):hcitool hcidump常用方法
- 取消github信用卡绑定
- Android教程 -09 数据的持久化存储
- 分页函数
- hdu1997汉诺塔VII
- 关于android webview调用相册和相机