设计模式总结之中介者模式

定义:用一个中介者对象封装一系列的对象交互,中介者使各个对象不需要显示地相互作用,从而使耦合松散,而且可以独立改变它们之间的交互。

类型:行为类模式


中介者模式主要是为了解决因交互对象较多而造成的耦合度过高,对象关系混乱的问题。

例如:


一个班级各个同学老师之间如果单独交流,则效率低下,关系复杂。


而建立一个qq群,大家都通过qq群来交流,则耦合度将变得松散,qq群则起到中介作用。

中介者模式设计到三个成员:

抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类的通信。一般由一个或多个抽象方法构成,并且由子类实现。

中介者实现类:实现抽象中介者,并通过其一同事类,通知消息给其他同事类。

同事类:本身可以影响其他类,也可以被其他类影响的类,被称作同事类。也可以是继承于同一父类的各个子类。

这里模仿一个客户和中介的例子,当中介发送消息时,客户可以通过中介者接收到,客户发送消息时,中介可以通过中介者接收到。

public abstract class College {
	protected Media media;
	private String name;
	public College() {
	// TODO Auto-generated constructor stub
	}

	public College(Media media, String name) {
		super();
		this.media = media;
		this.name = name;
	}

	public Media getMedia() {
		return media;
	}

	public void setMedia(Media media) {
		this.media = media;
	}	
	
	public abstract void sendMessage(String msg);
	public abstract void receiveMessage(String msg);

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
public class CustomerCollege extends College {
	
	public CustomerCollege() {

	}
	public CustomerCollege(Media media, String name) {
			super(media,name);
	}
	@Override
	public void sendMessage(String msg) {
		media.excute(this, msg);
	}

	@Override
	public void receiveMessage(String msg) {
		System.out.println("客户"+ getName() +"收到消息:"+msg);
	}

}
public class MediumCollege extends College{
		
	public MediumCollege() {
	// TODO Auto-generated constructor stub
	}
	public MediumCollege(Media media, String name) {
		super(media,name);
	}
	@Override
	public void sendMessage(String msg) {
		media.excute(this, msg);
	}
	@Override
	public void receiveMessage(String msg) {
		System.out.println("中介:" + getName() + " 收到消息:" + msg);
	}


}
public abstract class Media {
	protected ArrayList<College> mStudentColleges = new ArrayList<>();
	protected ArrayList<College> mTeacherColleges = new ArrayList<>();

	
	public  void addCollege(College college){
		college.setMedia(this);
		if (college instanceof MediumCollege) {
			mStudentColleges.add(college);
		}else {
			mTeacherColleges.add(college);
		}
	}
	public  void removeCollege(College college){
		if (college instanceof MediumCollege) {
			mStudentColleges.remove(college);
		}else {
			mTeacherColleges.remove(college);
		}
	}

	public abstract void excute(College college,String msg);
}
public class CollegeMedia extends Media{

	@Override
	public void excute(College college, String msg) {
			if (college instanceof MediumCollege) {
				for (int i = 0; i < mTeacherColleges.size(); i++) {
					mTeacherColleges.get(i).receiveMessage(msg);
				}
			}else if(college instanceof CustomerCollege){
				for (int i = 0; i < mStudentColleges.size(); i++) {
					mStudentColleges.get(i).receiveMessage(msg);
				}
			}
		
	}


}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值