调停者模式(Mediator)

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

类图:

角色:

抽象调停者(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();  
    }  
}
测试结果



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值