您的位置:首页 > 其它

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

2018-03-06 20:35 211 查看
定义:用一个中介者对象封装一系列的对象交互,中介者使各个对象不需要显示地相互作用,从而使耦合松散,而且可以独立改变它们之间的交互。
类型:行为类模式


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


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


而建立一个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);
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: