package mediatorModel; /* * 中介者模式:用一个中介对象来封装一系列的对象交互。 * 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 * * 中介者模式(Mediator)的适用性: * 1.一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。 * 2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。 * 3.想定制一个分布在多个类中的行为,但又不想生成太多的子类 * * 中介者模式(Mediator)的参与者: * 1.Mediator * 中介者定义一个接口用于与各同事(Colleague)对象通信。 * 2.ConcreteMediator * 具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。 * 3.Colleague: * 抽象同事类。 * 4.Colleagueclass * 具体同事类。每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者 * * 缺点: * 中介者控制集中化了,于是把交互复杂性变为了中介者的复杂性,这就使得中介者会比任何的同事(也就是这里的ColleagueclassY ColleagueclassM) * 都要复杂 * * 这里用一个不同国家的通信来举个例子 */ public class MediatorModel { public static void main(String[] args) { //中介者 ConcreteMediator concreteMediator = new ConcreteMediator(); //美国 ColleagueclassM colleagueclassM = new ColleagueclassM(concreteMediator); //伊拉克 ColleagueclassY colleagueclassY = new ColleagueclassY(concreteMediator); //设置中介者需要管理的两个同事(需要通信的国家) concreteMediator.setColleagueclassM(colleagueclassM); concreteMediator.setColleagueclassY(colleagueclassY); colleagueclassM.tongxin("我要打你啊!!"); colleagueclassY.tongxin("来呀不怕!!"); //本来是美国说的”我要打你啊“ 但是经过中介者这么一传输 就是伊拉克得到的我要打你啊的消息 } } /* * 中介者定义一个接口用于与各同事(Colleague)对象通信。 */ abstract class Mediator{ public abstract void tongxin(String mes,Colleague colleague); } /* * 抽象同事类。 */ abstract class Colleague{ //设置对象的中介者 也就是他想跟被人通信的时候让谁传达 protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } } /* * 具体同事类 */ class ColleagueclassY extends Colleague{ public ColleagueclassY(Mediator mediator) { super(mediator); } //跟别的国家说话啊 public void tongxin(String msg){ mediator.tongxin(msg, this); } public void Notify(String msg){ System.out.println("伊拉克得到消息:"+msg); } } class ColleagueclassM extends Colleague{ public ColleagueclassM(Mediator mediator) { super(mediator); } //跟别的国家说话啊 public void tongxin(String msg){ mediator.tongxin(msg, this); } //这个是等着中介者 通过判断之后才调用这个方法的 public void Notify(String msg){ System.out.println("美国得到消息:"+msg); } } /* * 具体中介者 */ class ConcreteMediator extends Mediator{ public ColleagueclassM colleagueclassM; public ColleagueclassY colleagueclassY; public void setColleagueclassM(ColleagueclassM colleagueclassM) { this.colleagueclassM = colleagueclassM; } public void setColleagueclassY(ColleagueclassY colleagueclassY) { this.colleagueclassY = colleagueclassY; } //通信 public void tongxin(String mes, Colleague colleague) { //如果是美国发送消息 那么就通知伊拉克 if(colleague == colleagueclassM){ colleagueclassY.Notify(mes); }else{ //如果是伊拉克发送消息 那么就通知美国 colleagueclassM.Notify(mes); } } }
25.中介模式
原创
©著作权归作者所有:来自51CTO博客作者木子的昼夜的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
51c大模型~合集25大模型
-
设计模式-策略模式
设计模式之策略模式
策略模式 设计模式 -
25.可选颜色
例如春天变秋天:
PS 其他 -
25. 函数的调用
定义函数后,我们需要调用此函数才能执行到这个函数里的代码段。这和main()函数不一样,main()为编译器设定好自动调用的主函数,
python java c++ 函数定义 调用函数