/*
抽象中介者
*/
public abstract class Mediator {
public abstract void send(String message,Colleague colleague);//发送消息
}
/*
* 员工抽象类
* */
public abstract class Colleague {
private Mediator mediator;//私有属性抽象中介者
public Colleague(Mediator mediator){//抽象类可以有参构造,构造参数,抽象中介者
this.mediator=mediator;
}
public Mediator getMediator() {//获得中介者
return mediator;
}
}
//具体员工1继承抽象员工
public class ConcreteColleague1 extends Colleague{
public ConcreteColleague1(Mediator mediator) {//继承抽象类,抽象类的有餐构造必须重新构建
super(mediator);//无法使用this,只能继承父类,super进行指向
}
public void send(String message){//发送信息
getMediator().send(message,this);//获得抽象中介者对象,发送信息以及这个具体员工对象
}
public void notice(String message){//同事1收到的信息
System.out.println("同事1收到的消息:"+message);
}
}
public class ConcreteColleague2 extends Colleague{
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void send(String message){
getMediator().send(message,this);
}
public void notice(String message){
System.out.println("同事2收到的消息:"+message);
}
}
/*
具体中介者
* */
public class ConcreteMediator extends Mediator{//继承抽象中介者,重写抽象方法
private ConcreteColleague1 concreteColleague1;//具体员工1
private ConcreteColleague2 concreteColleague2;//具体员工2
public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {//局部参数赋值给这个对象
this.concreteColleague1 = concreteColleague1;
}
public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
this.concreteColleague2 = concreteColleague2;
}
@Override
public void send(String message, Colleague colleague) {//发送方法,消息,抽象员工类
if(colleague==concreteColleague1){//如果员工对象是员工1
concreteColleague2.notice(message);//员工2获得消息
}else{
concreteColleague1.notice(message);
}
}
public class Test {
public static void main(String[] args) {
ConcreteMediator concreteMediator=new ConcreteMediator();//具体中介者
ConcreteColleague1 concreteColleague1=new ConcreteColleague1(concreteMediator);//具体员工1
ConcreteColleague2 concreteColleague2=new ConcreteColleague2(concreteMediator);//具体员工2
concreteMediator.setConcreteColleague1(concreteColleague1);//中介属性员工对象1
concreteMediator.setConcreteColleague2(concreteColleague2);//中介属性员工对象2
concreteColleague1.send("早上好");
concreteColleague2.send("做饭");
}
}