`

读《研磨设计模式》-代码笔记-中介者模式-Mediator

阅读更多
声明:
本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/




/*
 * 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。
 * 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
 * 
 * 在我看来,Mediator模式是把多个对象(Colleague)之间的交互集中到一个类(Mediator),由Mediator统一控制
 * Colleague之间就不再直接联系了(就解耦了),而是要通过Mediator才能间接联系上
 * 
 * 所以实现思路也就清晰了:
 * Colleague要能联系上Mediator,反过来也一样,Mediator和Colleague是互相依赖的,互相“持有”的
 * 
 * 中介者模式的缺点也很明显:Mediator可能会非常庞大和复杂
 * 
 * 以下实现是用“类组合”的方式来做
 * 若要简化:
 * 1、将Mediator实现成一个单例,那当Colleague需要用到Mediator时,直接getInstance
 * 2、当Mediator需要用到Colleague时,a.直接当成方法的参数传递过来 b.针对不同的Colleague定义不同的方法 等等
 */

interface Mediator {
	void change(Colleague colleague);
}

abstract class Colleague {
	
	private Mediator mediator;

	public Colleague(Mediator mediator) {
		this.mediator = mediator;
	}
	
	public Mediator getMediator() {
		return mediator;
	}

}

class ColleagueImplA extends Colleague {
	
	public ColleagueImplA(Mediator mediator) {
		super(mediator);
	}
	
	public void doSomethingA() {
		getMediator().change(this);
	}
	
}

class ColleagueImplB extends Colleague {
	
	public ColleagueImplB(Mediator mediator) {
		super(mediator);
	}
	
	public void doSomethingB() {
		getMediator().change(this);
	}
	
}

class MediatorImpl implements Mediator {

    //这里也可以用Map/List来管理Colleague,提供add、 delete等方法
	private ColleagueImplA colleagueA;
	
	private ColleagueImplB colleagueB;
	
	public void setColleagueA(ColleagueImplA colleagueA) {
		this.colleagueA = colleagueA;
	}
	
	public void setColleagueB(ColleagueImplB colleagueB) {
		this.colleagueB = colleagueB;
	}
	
	//协调Colleague之间的交互,如果Colleague非常多,或者业务逻辑非常复杂的话,这个方法会非常庞大
	//这个方法也可以灵活改变,例如传递更多的参数:change(Colleague c, String demand)等等
	public void change(Colleague colleague) {
		if (colleague == colleagueA) {
			System.out.println("colleagueA changed,now colleagueB can do something to react.");
		}
		if (colleague == colleagueB) {
			System.out.println("colleagueB changed,now colleagueA can do something to react.");
		}
	}
	
}


public class MediatorPattern {
	public static void main(String[] args) {
		MediatorImpl mediator = new MediatorImpl();
		ColleagueImplA colleagueA = new ColleagueImplA(mediator);
		ColleagueImplB colleagueB = new ColleagueImplB(mediator);
		mediator.setColleagueA(colleagueA);
		mediator.setColleagueB(colleagueB);
		colleagueA.doSomethingA();
	}

}

分享到:
评论

相关推荐

    设计模式专题之(十七)中介者模式---设计模式中介者模式示例代码(python--c++)

    **中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...

    c++设计模式-行为型模式-中介者模式

    c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式...

    研磨设计模式-part2

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

    研磨设计模式-part4

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

    研磨设计模式-part3

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

    设计模式之中介者模式(Mediator)

    **中介者模式(Mediator)详解** 在软件工程中,设计模式是一种被广泛采用...在实际开发中,尤其是在面对大量对象交互的复杂场景时,中介者模式是一个非常实用的设计模式,能够帮助我们构建出更易于理解和维护的代码。

    设计模式-中介者模式(讲解及其实现代码)

    总结来说,中介者模式是一种有效的设计模式,它能有效地减少对象之间的直接依赖关系,提高代码的可读性和可维护性。在实际项目中,如聊天系统、游戏引擎、事件驱动系统等,都可以应用中介者模式来简化对象间的交互。...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的状态,并在该对象之外保存这个状态,以便以后恢复。 - 观察者模式...

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

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

    设计模式 - 中介者模式(C++实例)

    **中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...

    设计模式之中介者模式(Mediator Pattern)

    **设计模式之中介者模式(Mediator Pattern)** 在软件工程中,设计模式是一种解决常见问题的经验总结,它提供了一种可复用的解决方案。中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过...

    设计模式 - 中介者模式

    中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...

    java常用设计模式-中介者模式

    中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式...中介者模式(Mediator Pattern)、解释器模式(Interpreter Pattern)、享元模式(Flyweight Pattern)、备忘录模式(Memento Pattern)等...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式

    标题和描述均提到了"C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式",这明确指向了一个特定的设计模式——中介者模式(Mediator Pattern),并且是在C#语言环境下的应用。下面将详细阐述这一设计...

    JAVA设计模式-chm版

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...

    设计模式专题---设计模式示例代码(全)(python--c++)

    7. **Mediator模式**:Mediator模式是一种行为设计模式,定义了一个接口,用于在各对象之间进行通信,降低了对象之间的耦合性,使得对象之间的交互更加灵活。 8. **Memento模式**:Memento模式是用于保存对象状态的...

    设计模式 Mediator 中介者 c++

    中介者模式的完整代码。 程序默认使用vs开发。其他开发工具可能需要做少许调整。

    C++设计模式课件17_Mediator_中介者.pdf

    ### C++设计模式之Mediator(中介者)详解 #### 一、引言 在软件开发过程中,随着系统的复杂度逐渐增加,各个组件之间的交互变得越来越频繁,这不仅增加了系统的耦合度,还使得系统维护变得困难重重。为了解决这一...

Global site tag (gtag.js) - Google Analytics