java设计模式(2):中介者模式

中介者模式

中介者模式的三个参与者:

(1)中介者接口:mediator

(2)中介者实现类:concreteMediator

(3)同事:colleague


应用场景

若有多个对象之间,相互调用,请求复杂


那么可以考虑引入一个“中介”,多个对象都与中介进行联系,不需要互相调用,松耦合,让代码更健壮。可以把上面的网状结构梳理为下面的星形结构。


代码示例

中介者抽象类,定义接口,同事列表

public abstract class Mediator {
	
	// 中介者维护同事间的一个列表
	ColleagueA colleagueA;
	ColleagueB colleagueB;
	ColleagueC colleagueC;
	
	public void setColleagueA(ColleagueA colleagueA) {
		this.colleagueA = colleagueA;
	}

	public void setColleagueB(ColleagueB colleagueB) {
		this.colleagueB = colleagueB;
	}

	public void setColleagueC(ColleagueC colleagueC) {
		this.colleagueC = colleagueC;
	}

	//中介者必须具备在同事之间处理逻辑、分配任务、促进交流的操作
	public abstract void sayMsg();
	
}

中介者实现类

public class ConcreteMediator extends Mediator{

	@Override
	public void sayMsg() {
		super.colleagueA.doSelf();
		super.colleagueB.doSelf();
		super.colleagueC.doSelf();
	}

}

抽象同事类

public abstract class AbstractColleague {

	// 同事间都认识中介者
	protected Mediator mediator;
	
	public AbstractColleague(Mediator mediator){
		this.mediator = mediator;
	}
	
	// 做自己独立的事情
	public abstract void doSelf();
	
	// 做依赖其他同事的事情
	public abstract void doDep();
}

具体同事类

public class ColleagueA extends AbstractColleague{

	public ColleagueA(Mediator mediator) {
		super(mediator);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void doSelf() {
		System.out.println("ColleagueA ---doSelf");
		
	}

	@Override
	public void doDep() {
		super.mediator.sayMsg();		
	}
}
public class ColleagueB  extends AbstractColleague{

	public ColleagueB(Mediator mediator) {
		super(mediator);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void doSelf() {
		System.out.println("ColleagueB ---doSelf");
		
	}

	@Override
	public void doDep() {
		super.mediator.sayMsg();		
		
	}
 
}
public class ColleagueC  extends AbstractColleague{

	public ColleagueC(Mediator mediator) {
		super(mediator);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void doSelf() {
		System.out.println("ColleagueC ---doSelf");
		
	}

	@Override
	public void doDep() {
		super.mediator.sayMsg();		
		
	}

}

测试类:

public class Test {

	public static void main(String[] args) {
		
		ConcreteMediator concreteMediator = new ConcreteMediator();
		ColleagueA colleagueA = new ColleagueA(concreteMediator);
		ColleagueB colleagueB = new ColleagueB(concreteMediator);
		ColleagueC colleagueC = new ColleagueC(concreteMediator);

		//中介者有各个同事的列表
		concreteMediator.setColleagueA(colleagueA);
		concreteMediator.setColleagueB(colleagueB);
		concreteMediator.setColleagueC(colleagueC);
		
		System.out.println("*********************");
		colleagueA.doSelf();
		System.out.println("*********************");
		colleagueA.doDep();
	}

}
输出结果
*********************
ColleagueA ---doSelf
*********************
ColleagueA ---doSelf
ColleagueB ---doSelf
ColleagueC ---doSelf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值