`

18、中介者模式

阅读更多

中介者模式

 

1、定义

用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。

 

2、结构图



 

  •  抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
  • 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
  • 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。

3、代码

(1)同事抽象类

 

public abstract class Colleague {

	private int num;

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
	
	public abstract void setNum(int num, AbstractMediator mediator);
	
}

 

 (2)同事A

 

 

 

 

public class ColleagueA extends Colleague{

	@Override
	public void setNum(int num, AbstractMediator mediator) {
		super.setNum(num);
		mediator.AaffectB();
	}

}

 

(3)同事B

public class ColleagueB extends Colleague {

	@Override
	public void setNum(int num, AbstractMediator mediator) {
		super.setNum(num);
		mediator.BaffectA();
	}

}

 

(4)中介者抽象类

	public AbstractMediator(Colleague colleagueA, Colleague colleagueB) {
		super();
		this.colleagueA = colleagueA;
		this.colleagueB = colleagueB;
	}

	protected Colleague colleagueA;
	
	protected Colleague colleagueB;
	
	public abstract void AaffectB();
	
	public abstract void BaffectA();
	
}

 

(5)中介者具体类

public class Mediator extends AbstractMediator {

	public Mediator(Colleague colleagueA, Colleague colleagueB) {
		super(colleagueA, colleagueB);
	}

	@Override
	public void AaffectB() {
		super.colleagueB.setNum(super.colleagueA.getNum()*100);
	}

	@Override
	public void BaffectA() {
		super.colleagueA.setNum(super.colleagueB.getNum()/100);
	}

}

 

(5)客户端

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Colleague colleagueA = new ColleagueA();
		Colleague colleagueB = new ColleagueB();
		
		AbstractMediator mediator = new Mediator(colleagueA, colleagueB);
		
		colleagueA.setNum(100, mediator);
		System.out.println("A num:"+colleagueA.getNum());
		System.out.println("B num:"+colleagueB.getNum());
		System.out.println("--------------------------");
		colleagueB.setNum(100, mediator);
		System.out.println("A num:"+colleagueA.getNum());
		System.out.println("B num:"+colleagueB.getNum());
	}

}

 (6)运行结果

 

A num:100
B num:10000
--------------------------
A num:1
B num:100

 

 

4、总结

  • 适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。
  • 使用中介者模式可以将对象间一对多的关联转变为一对一的关联,使对象间的关系易于理解和维护。
  • 使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。
  • 大小: 9.4 KB
分享到:
评论

相关推荐

    设计模式所有实验及实验报告及代码.zip

    软件设计模式概述 ...32中介者模式 33迭代器模式 34访问者模式 35备忘录模式 36解释器模式 37UMLet的使用与类图的设计 38创建型模式应用实验 39结构型模式应用实验 40行为型模式应用实验 所有实验及实验报告及代码

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD ...21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式

    java设计模式

    14.4 中介者模式的实际应用 14.5 最佳实践 第15章 命令模式 15.1 项目经理也难当 15.2 命令模式的定义 15.3 命令模式的应用 15.3.1 命令模式的优点 15.3.2 命令模式的缺点 15.3.3 命令模式的使用场景 15.4 命令模式...

    C#设计模式_设计模式_C#_

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括...中介者模式 22.享元模式 23.解释器模式 24.访问者模式 ... 相关资料:https://download.csdn.net/download/djk8888/11189309 和 https://download.csdn.net/download/djk8888/11189072

    Java23种设计模式(总结)

    1. 设计模式 2 1.1 创建型模式 3 1.1.1 工厂方法 ... 44 1.3.5 中介者模式 48 1.3.6 备忘录模式 51 1.3.7 观察者模式 53 1.3.8 状态模式 1.3.9 策略模式 1.3.10 模板方法 1.3.11 访问者模式

    C#设计模式(23种设计模式)

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    设计模式PPT.rar

    12第十二讲代理模式 13第十三讲外观模式 14第十四讲组合模式 15第十五讲桥接模式 16第十六讲适配器模式 17第十七讲解释器模式 18第十八讲中介者模式 19第十九讲职责链模式 20第二十讲迭代模式 21第二十一讲模板方法...

    NET 设计模式

    代码可以运行,下载这个后,建议买->《大话设计模式这本书》。...16、中介者模式 17、享元模式 18、解释器模式 19、访问者模式 20、策略模式 21、装饰模式 22、代理模式 23、工厂方法模式 24、原型模式

    32种设计模式

    中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23...

    C#23种设计模式

    18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State ...

    设计模式课程每章ppt(共27章).zip

    ├── 第21章_中介者模式.ppt ├── 第22章_备忘录模式.ppt ├── 第23章_观察者模式.ppt ├── 第24章_状态模式.ppt ├── 第25章_策略模式.ppt ├── 第26章_模板方法模式.ppt ├── 第27章_访问者模式.ppt...

    设计模式代码——c#

    18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    设计模式,软件开发者必读

    4.4 MEDIATOR 中介者模式 71 4.5 ITERATOR 迭代器模式 75 4.6 OBSERVER 观察者模式 83 4.7 MEMENTO 备忘录模式 87 4.8 STATE 状态模式 91 4.9 STRATEGY 策略模式 96 4.10 TEMPLATE METHOD模板方法 100 4.11 VISITOR ...

    研磨设计模式(完整带书签).part2.pdf

    第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 观察者模式(Observer) 第13章 命令模式(Command) 第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template ...

    Delphi模式编程第一分卷

    20.3.1 中介者模式在聊天室系统中的应用 20.3.2 范例小结 第21章 备忘录模式(Memento) 21.1 模式解说 21.2 结构与用法 21.2.1 模式结构 21.2.2 代码模板 21.2.3 问题讨论 21.3 范例与实践 21.3.1 备忘录...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式 C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 C#...

    Delphi模式编程第二分卷

    20.3.1 中介者模式在聊天室系统中的应用 20.3.2 范例小结 第21章 备忘录模式(Memento) 21.1 模式解说 21.2 结构与用法 21.2.1 模式结构 21.2.2 代码模板 21.2.3 问题讨论 21.3 范例与实践 ...

    刘伟1..25章设计模式大集合

    第21章_中介者模式.ppt 第22章_备忘录模式.ppt 第23章_观察者模式.ppt 第25章_策略模式.ppt 第2章_面向对象设计原则.ppt 第3章_设计模式概述.ppt 第4章_简单工厂模式.ppt 第5章_工厂方法模式.ppt 第6章_抽象工厂模式...

Global site tag (gtag.js) - Google Analytics