调停者模式(Mediator)

xiaoxiao2021-02-28  156

定义:调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

类图:

角色:

抽象调停者(Mediator)角色:定义出同事对象到调停者对象的接口,其中主要方法是一个(或多个)事件方法。

具体调停者(ConcreteMediator)角色:实现了抽象调停者所声明的事件方法。具体调停者知晓所有的具体同事类,并负责具体的协调各同事对象的交互关系。

抽象同事类(Colleague)角色:定义出调停者到同事对象的接口。同事对象只知道调停者而不知道其余的同事对象。

具体同事类(ConcreteColleague)角色:所有的具体同事类均从抽象同事类继承而来。实现自己的业务,在需要与其他同事通信的时候,就与持有的调停者通信,调停者会负责与其他的同事交互。

例:

仿照一个系统的制作过程,PM负责协调设计、开发、测试三者的角色来完成项目

//抽象调停者 public interface ProjectManagerInterface { public void toNextColleague(Colleague c); } //具体调停者 public class ProjectManager implements ProjectManagerInterface { private Developer developer; private Tester tester; public void toNextColleague(Colleague c) { if(c instanceof Designer){ developer.coding(); }else if(c instanceof Developer){ tester.test(); }else if(c instanceof Tester){ System.err.println("finish"); } } public void doAction(){ Designer designer = new Designer(this); developer = new Developer(this); tester = new Tester(this); designer.disignerImage(); } } //抽象同事类 public abstract class Colleague { //持有一个调停者对象 private ProjectManagerInterface mediator; /** * 构造函数 */ public Colleague(ProjectManagerInterface mediator){ this.mediator = mediator; } /** * 获取 项目老大 */ public ProjectManagerInterface getMediator() { return mediator; } } //具体同事类 设计 public class Designer extends Colleague{ public Designer(ProjectManagerInterface mediator) { super(mediator); } public void disignerImage(){ System.err.println("draw a circle..."); getMediator().toNextColleague(this); } } //具体同事类 开发 public class Developer extends Colleague{ public Developer(ProjectManagerInterface mediator) { super(mediator); } public void coding() { System.err.println("coding "); getMediator().toNextColleague(this); } } //具体同事类 测试 public class Tester extends Colleague { public Tester(ProjectManagerInterface mediator) { super(mediator); } public void test(){ System.err.println("test case..."); getMediator().toNextColleague(this); } } //测试客户端 public class Client { public static void main(String[] args) { ProjectManager projectManager = new ProjectManager(); projectManager.doAction(); } } 测试结果

转载请注明原文地址: https://www.6miu.com/read-66429.html

最新回复(0)