zoukankan      html  css  js  c++  java
  • [译]Java 设计模式之中介者

    (文章翻译自Java Design Pattern: Mediator)

    中介者设计模式被用于一组的同事进行协作。这些同事不彼此进行直接的交流联系,但是是通过中介者。

    在下面的例子中,A同事想去说话,B同事先去打架。当他们做些事情时候他们调用了中介者的方法去做这些。

    中介者模式类图

    mediator-design-pattern

    中介者Java代码

    package designpatterns.mediator;
     
    interface IMediator {
    	public void fight();
    	public void talk();
    	public void registerA(ColleagueA a);
    	public void registerB(ColleagueB a);
    }
     
    //concrete mediator
    class ConcreteMediator implements IMediator{
     
    	ColleagueA talk;
    	ColleagueB fight;
     
    	public void registerA(ColleagueA a){
    		talk = a;
    	}
     
    	public void registerB(ColleagueB b){
    		fight = b;
    	}
     
    	public void fight(){
    		System.out.println("Mediator is fighting");
    		//let the fight colleague do some stuff
    	}
     
    	public void talk(){
    		System.out.println("Mediator is talking");
    		//let the talk colleague do some stuff
    	}
    }
     
    abstract class Colleague {
    	IMediator mediator;
    	public abstract void doSomething();
    }
     
    //concrete colleague
    class ColleagueA extends Colleague {
     
    	public ColleagueA(IMediator mediator) {
    		this.mediator = mediator;
    	}
     
    	@Override
    	public void doSomething() {
    		this.mediator.talk();
    		this.mediator.registerA(this);
    	}
    }
     
    //concrete colleague
    class ColleagueB extends Colleague {
    	public ColleagueB(IMediator mediator) {
    		this.mediator = mediator;
    		this.mediator.registerB(this);
    	}
     
    	@Override
    	public void doSomething() {
    		this.mediator.fight();
    	}
    }
     
    public class MediatorTest {
    	public static void main(String[] args) {
    		IMediator mediator = new ConcreteMediator();
     
    		ColleagueA talkColleague = new ColleagueA(mediator);
    		ColleagueB fightColleague = new ColleagueB(mediator);
     
    		talkColleague.doSomething();
    		fightColleague.doSomething();
    	}
    }
    

    在其他的行为模式中,观察者是和中介者最相似的。你可以读下观察者模式来比较下他们的不同。

  • 相关阅读:
    第十讲 PKI/CA
    4 Hermite二次型
    5 范数及矩阵函数
    3 矩阵的相似标准形
    iOSframework制作 [xcode13]
    iOS私有库[组件化] something about order
    Jenkins 内置变量
    CentOS安装并配置vsftpd服务
    ViewModelProviders报错
    Python 常用内置数据结构和算法
  • 原文地址:https://www.cnblogs.com/zhangminghui/p/4214609.html
Copyright © 2011-2022 走看看