Mediator中介者模式定义
Mediator 中介者,或者叫仲裁者,类似房屋的中介,比如演播室的主播和嘉宾,主播在说话的时候,嘉宾不能打断他,主播停止说话的时候嘉宾才能说话,主播则可以随时说话,这里还有一个中间人:
1.主播对中介者说,节目开始了,我要说话了
2.中介者看看嘉宾是不是在说话,如果是在说话,让他停止,让主播说,如果嘉宾没在说话,让主播说
3.嘉宾告诉中介者说我要说话,中介者看看主播是否在说话,如果在说话,就告诉嘉宾说主播在说,你等等再说;如果主播不在说话,则让嘉宾说
代码例子如下:
package mediator;
/*
* 中介者类,并和两个参与者进行关联,两个参与者在中介者这里注册
*/
public class Mediator {
private Anchor anchor;
private Guest guest;
public void regAnchor(Anchor anchor){
this.anchor=anchor;
}
public void regGuest(Guest guest){
this.guest=guest;
}
//中介代替主持人说话,如果嘉宾在说话,打断他,主持人说,主持人的状态变为忙碌
public void anchorSpeak(){
if(!guest.isFree()){
guest.stop();
}
System.out.println("Anchor is speaking....");
anchor.setFree(false);
}
//中介代替嘉宾说话,如果主持人空闲,嘉宾才能说话,嘉宾状态变为忙碌,
//否则,不让嘉宾说话,主持人继续说
public void guestSpeak(){
if(anchor.isFree()){
System.out.println("Guest is speaking....");
guest.setFree(false);
}
else{
System.out.println("Anchor is speaking. Do not interrupt...");
}
}
//中介代替主持人停止说话,设置状态为空闲
public void anchorStop(){
System.out.println("Anchor stop speaking now....");
anchor.setFree(true);
}
//中介代替嘉宾停止说话,设置状态为空闲
public void guestStop(){
System.out.println("Guest stop speaking now...");
guest.setFree(true);
}
}
package mediator;
/*
* 主持人类,有一个状态,是否处于空闲状态
* 有一个终结者的私有属性,和中介者产生关系
*/
public class Anchor {
private boolean free;
private Mediator med;
public Anchor(Mediator md){
med=md;
}
public boolean isFree() {
return free;
}
public void setFree(boolean free) {
this.free = free;
}
//通过中介者来开始说话
public void speak() {
med.anchorSpeak();
}
//通过中介者来停止说话
public void stop() {
med.anchorStop();
}
}
package mediator;
/*
* 嘉宾类,私有属性标记是否空闲
* 私有属性中介者,与中介者产生关系
*/
public class Guest {
private boolean free;
private Mediator med;
public Guest(Mediator md) {
this.med = md;
}
public boolean isFree() {
return free;
}
public void setFree(boolean free) {
this.free = free;
}
//通过中介者开始说话
public void speak() {
med.guestSpeak();
}
//通过中介者停止说话
public void stop() {
med.guestStop();
}
}
package mediator;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//新建一个中介者
Mediator med = new Mediator();
//新建一个主持人,并和中介者关联,让主持人知道中介都有什么能力(什么方法)
Anchor anchor = new Anchor(med);
//新建一个嘉宾,并和中介者关联,让嘉宾知道中介都能什么能力(什么方法)
Guest guest=new Guest(med);
//在中介者里面,注册主持人,和嘉宾,让中介者知道嘉宾和主持人都需要什么
med.regAnchor(anchor);
med.regGuest(guest);
//主持人说
anchor.speak();
//嘉宾说
guest.speak();
//主持人停止
anchor.stop();
//嘉宾说
guest.speak();
//主持人说
anchor.speak();
}
}
中介者就是一个处于众多对象,并恰当地处理众多对象之间相互之间的联系的角色。
以上代码中只有两个参与者类,,但是这些我们都可以根据中介者模式的宗旨进行适当地扩展,即增加参与者类,然后中介者就得担负更加重的任务了,我们看到上面具体中介者类Mediator中的方法比较多而且有点乱。
所以,在解耦参与者类之间的联系的同时,中介者自身也不免任务过重,因为几乎所有的业务逻辑都交代到中介者身上了,可谓是“万众期待”的一个角色了。这就是中介者模式的不足之处了 。
此外,上面这个代码例子的参与者的属性和方法都是一样的,我们可以抽取一个抽象类出来,减少代码,但是有时候我们根本抽取不了多个“参与者”之间的共性来形成一个抽象类,这也大大增加了中介者模式的使用难度。
参考:
- 大小: 14.7 KB
- 大小: 39.2 KB
分享到:
相关推荐
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...
Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...
这篇博文将引导初学者入门Java设计模式的世界。 在学习设计模式之前,我们需要了解几个基本概念。首先,设计模式不是代码片段,而是一种通用解决方案的描述,可以应用于各种编程语言中。其次,设计模式分为三类:...
Java设计模式中的中介者模式是一种行为设计模式,其主要目的是减少对象之间的直接依赖关系,从而降低系统的耦合度。在日常生活中,我们常常能看到房屋中介、留学中介等,它们作为一个中间方,帮助各方进行沟通和协调...
**Java设计模式之中介者模式** 在软件工程中,设计模式是解决常见问题的模板,它们代表了在特定上下文中经过验证的解决方案。其中一种重要模式是“中介者模式”(Mediator Pattern)。中介者模式的主要目的是降低多...
Java设计模式中的中介者模式是一种行为设计模式,其主要目的是减少对象之间的直接交互,从而降低对象间的耦合度。在日常生活中,我们常常会遇到房屋中介、留学中介等,它们作为一个中间媒介,使得原本需要直接打交道...
中介者模式是一种行为设计模式,它用于简化多个对象之间的交互,通过引入一个中介对象来解耦原本直接相互作用的对象。在Java编程中,这种模式尤其有用,因为它可以帮助我们减少类之间的耦合,提高代码的可读性和可...
在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的标准化方法。设计模式不是具体的代码或库,而是一种通用解决方案的描述,可以应用于各种编程语言,包括Java。在这个名为"JAVA ...
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: ...设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
**中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...
### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...
" JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...
中介模式是一种行为设计模式,它定义了一个单独的对象,该对象负责协调多个相关对象之间的交互,使得这些对象无需相互引用,降低了耦合度。在Java编程中,中介模式的应用能够有效地解决复杂系统中对象间的通信问题,...
**设计模式之中介模式——Java实现版本** 设计模式是软件工程中的一种最佳实践,它提供了解决常见问题的标准模板。中介模式(Mediator Pattern)属于行为设计模式,它旨在降低多个对象之间的复杂交互,通过引入一个...
**Java设计模式之中介模式(Mediator模式)介绍** 中介模式是一种行为设计模式,它旨在减少多个对象之间的直接通信,从而降低系统复杂性。在Java中,Mediator模式通过引入一个中介对象,使得原本直接相互依赖的对象...
17. 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 18. 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 19. 观察者模式...
中介者模式是一种行为设计模式,它的主要目标是减少对象之间的耦合性,通过引入一个中介对象来协调多个对象之间的交互。在传统的多对象交互场景中,对象之间可能存在复杂的依赖关系,这会导致代码难以理解和维护。...