首页 > 代码库 > 中介者模式
中介者模式
学了这么多的设计模式,离真正的实际运用还有很长的路要走,理论是理论,理论结合实践才有用。今天继续吧,继续一个学习一个新的设计模式——中介者模式。
中介在现实生活中非常常见,比如你要租一个房子,可能你不会和房东直接接触而是通过中介来完成一系列繁琐的过程。中介者模式就是这样的存在,如果一个类需要调用另一个类的某一个方法的话,可以通过第三方转发这个调用。之所以这么做是因为有一个叫做“迪米特”的法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。中介者模式的定义:用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式的UML类结构图如下所示:
代码实现:
1 package day_10_mediator; 2 3 /** 4 * 中介者接口 5 * @author 余林丰 6 * 7 * 2016年10月11日 8 */ 9 public interface Mediator {10 void send(String msg, AbstractObject object);11 }
1 package day_10_mediator; 2 3 /** 4 * 具体中介者 5 * @author 余林丰 6 * 7 * 2016年10月11日 8 */ 9 public class ConcreteMediator implements Mediator {10 private ConcreteObjectA concreteObjectA;11 private ConcreteObjectB concreteObjectB;12 13 public void setConcreteObjectA(ConcreteObjectA concreteObjectA) {14 this.concreteObjectA = concreteObjectA;15 }16 17 public void setConcreteObjectB(ConcreteObjectB concreteObjectB) {18 this.concreteObjectB = concreteObjectB;19 }20 21 /* (non-Javadoc)22 * @see day_10_mediator.Mediator#send(java.lang.String, day_10_mediator.AbstractObject)23 */24 @Override25 public void send(String msg, AbstractObject object) {26 if (object == concreteObjectA){27 concreteObjectB.notify(msg);28 } else {29 concreteObjectA.notify(msg);30 }31 }32 33 }
1 package day_10_mediator; 2 3 /** 4 * 公共抽象类 5 * @author 余林丰 6 * 7 * 2016年10月11日 8 */ 9 public abstract class AbstractObject {10 protected Mediator mediator;11 12 public AbstractObject(Mediator mediator){13 this.mediator = mediator;14 }15 }
1 package day_10_mediator; 2 3 /** 4 * 类A 5 * @author 余林丰 6 * 7 * 2016年10月11日 8 */ 9 public class ConcreteObjectA extends AbstractObject {10 11 /**12 * @param mediator13 */14 public ConcreteObjectA(Mediator mediator) {15 super(mediator);16 }17 18 public void send(String msg){19 mediator.send(msg, this);20 }21 22 public void notify(String msg){23 System.out.println("ConcreteObjectA得到消息:" + msg);24 }25 }
1 package day_10_mediator; 2 3 /** 4 * @author 余林丰 5 * 6 * 2016年10月11日 7 */ 8 public class ConcreteObjectB extends AbstractObject { 9 10 /**11 * @param mediator12 */13 public ConcreteObjectB(Mediator mediator) {14 super(mediator);15 }16 17 public void send(String msg){18 mediator.send(msg, this);19 }20 21 public void notify(String msg){22 System.out.println("ConcreteObjectB得到消息:" + msg);23 }24 }
1 package day_10_mediator; 2 3 /** 4 * @author 余林丰 5 * 6 * 2016年10月11日 7 */ 8 public class Client { 9 10 public static void main(String[] args){11 ConcreteMediator mediator = new ConcreteMediator();12 ConcreteObjectA objectA = new ConcreteObjectA(mediator);13 ConcreteObjectB objectB = new ConcreteObjectB(mediator);14 15 mediator.setConcreteObjectA(objectA);16 mediator.setConcreteObjectB(objectB);17 18 objectA.send("Hello B");19 objectB.send("Hello A");20 }21 }
手敲一遍,才能体会。
中介者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。