`
java苹果+番茄
  • 浏览: 68007 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

调停者(Mediator)模式 【行为模式第四篇】

阅读更多
调停者(Mediator)模式
调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以较松散地耦合。
当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化

要想恰到好处地在一个系统里面使用设计模式,必须做到以下几点:
(1)完全了解面临的问题,这就是说要完全了解具体情况。如果不完全了解所面临的问题,怎么能谈得上解决问题呢?
(2)完全了解模式,这就是说要十分懂得理论。如果不完全懂得所使用的理论,怎么能够正确地应用这一理论呢?
(3)非常了解怎样使用设计模式解决实际问题,这就是说要将模式理论与具体系统需求情况相结合。如果设计师不知道一个设计模式怎样
     对系统设计有帮助的华,最好不要使用这个模式。不要只是因为想在简历上写上设计模式方面的经验就盲目地使用模式。

调停者模式就是一个很容易被滥用的模式。

//调停者模式包括以下几种角色
1、抽象调停者角色:定义出同事对象到调停者对象的接口,其中主要的方法是一个(或者多个)事件方法,在有些情况下,
   这个抽象对象可以省略。一般而言,这个角色由一个Java抽象类或者Java对象实现。
2、具体调停者角色:从抽象调停者继承而来,实现了抽象超类所声明的事件方法。具体调停者知晓所有的具体同事类,它从具体同事
   对象接受消息、向具体同事对象发出命令。一般而言,这个角色由一个具体Java类实现。
3、抽象同事类角色:定义出调停者到同事对象的接口。同事对象只知道调停者而不知道其余的同事对象。一般而言,这个角色由一个
   Java抽象类或者Java对象实现。
4、具体同事类角色:所有的具体同时类均从抽象同事类继承而来。每一个具体同事类都很清楚它自己在小范围内的行为,而不知到它
   在大范围内的目的。
 //抽象类同事类
		   public abstract class Colleague{
		   	private Mediator mediator;
		   	
		   	public Colleague(Mediator m){
		   		mediator =  m;
		   	}
		   	
		   	public Mediator getMediator(){
		   		return mediator;
		   	}
		   	
		   	public abstract void action();
		   	
		   	public void change(){
		   		mediator.colleagueChanged(this);
		   	}
		   }
		   
		  //具体同事类
		  public class Colleague1 extends Colleague{
		  	public Colleague1(Mediator m){
		  		super(m);
		  	}
		  	
		  	public void action(){
		  		System.out.println("This is an action from Colleague 1");
		  	}
		  }
		  
		  public class Colleague2 extends Colleague{
		  	public Colleague2(Mediator m){
		  		super(m);
		  	}
		  	
		  	public void action(){
		  		System.out.println("This is an action from Colleague 2");
		  	}
		  }
		  
		  //抽象调停者角色
		  public class Mediator{
		  	public abstract void colleagueChanged(Colleague c);
		  	
		  	public static void main(String[] args){
		  		ConcreteMediator mediator = new ConcreteMediator();
		  		
		  		mediator.createConcreteMediator();
		  		Colleague c1 = new Colleague1(mediator);
		  		Colleague c2 = new Colleague2(mediator);
		  		mediator.colleagueChanged(c1);
		  	}
		  }
		
		//具体调停者角色
		public class ConcreteMediator extends Mediator{
			private Colleague1 colleague1;
			private Colleague2 colleague2;
			
			public void colleagueChanged(Colleague c){
				colleague1.action();
				colleague2.action();
			}
			
			public void createConcreteMediator(){
				colleague1 = new Colleague1(this);
				colleague2 = new Colleague2(this);
			}
			
			public Colleague1 getColleague1(){
				return colleague1;
			}
			
			public Colleague2 getColleague2(){
				return colleague2;
			}
			
		}


调停者模式的优点和缺点:
1、调停者模式的优点:
(1)适当使用调停者模式可以较少使用静态的继承关系,使得具体同事类可以更加容易地被复用。
(2)适当使用调停者模式可以避免同事之间的过渡耦合,使得调停类与同事类可以相对独立地演化。
(3)调停者模式将多对多的相互转化为一对多的相互作用,使得对象之间的关系更加易于维护个理解。
(4)调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

2、调停者模式的缺点:
(1)调停者模式降低了同事对象的复杂性,代价是增加了调停者类的复杂性。当然,在很多情况下,设置
     一个调停者并不比不设置一个调停者更好
(2)调停者类经常充满了各个具体同事类的关系协调代码,这种代码常常是不能复用的。因此,具体同事类的
     复用是以调停者类的不可复用为代价的。
    
     显然,调停者模式为同事对象,而不是调停者对象提供了可扩展性,所以这个模式所提供的可扩展性是一种
     (向同事对象)倾斜的可扩展性。


在什么情况下使用调停者模式
大多数对模式的研究集中于模式应当在什么情况下使用,却往往忽视这些模式不应当在什么情况下使用。

1、不应当在责任划分混乱时使用

2、不应当对“数据类”和“方法类”使用
分享到:
评论

相关推荐

    Mediator模式

    1. **Mediator(中介者)**:这个是模式的核心,它知道所有同事类,并负责协调它们的行为。它提供一个统一的接口,使得同事对象之间的交互变得简单和有序。 2. **Colleague(同事)**:这是Mediator模式中的基础类...

    调停者模式

    调停者模式涉及的角色包括抽象调停者(Mediator)、具体调停者(Concrete Mediator)、抽象同事类(Colleague)和具体同事对象(Concrete Colleague)。抽象调停者定义了同事对象与调停者之间的接口;具体调停者实现...

    C++ Mediator模式

    4. **Concrete Colleague(具体同事)**: 实现Colleague接口,每个具体同事类都对Mediator有一个引用,通过这个引用与中介者交互。 ### Mediator模式的实现 在C++中,我们首先定义Mediator抽象类,声明需要同事对象...

    mediator模式

    **中介者模式(Mediator Pattern)** 中介者模式是一种行为设计模式,它的主要目标是减少对象之间的耦合性,通过引入一个中介对象来协调多个对象之间的交互。在传统的多对象交互场景中,对象之间可能存在复杂的依赖...

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

    **中介者模式(Mediator)详解** 在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,其中中介者模式是结构型设计模式的一种。它的主要目标是降低对象之间的耦合度,使得对象之间的关系更加清晰,...

    (行为型模式) Mediator 中介者模式

    C#面向对象设计模式 (行为型模式) Mediator 中介者模式 视频讲座下载

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

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

    JAVA设计模式之调停者模式详解

    调停者模式是一种设计模式,属于对象的行为模式,其主要目的是降低对象之间的耦合度,使得对象之间的交互更加灵活且易于管理。在Java中,调停者模式通过引入一个中介对象,也就是调停者,来协调多个对象之间的交互,...

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

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

    设计模式 Mediator 中介者 c++

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

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

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

    Java设计模式之中介模式(Mediator模式)介绍

    **Java设计模式之中介模式(Mediator模式)介绍** 中介模式是一种行为设计模式,它旨在减少多个对象之间的直接通信,从而降低系统复杂性。在Java中,Mediator模式通过引入一个中介对象,使得原本直接相互依赖的对象...

    中介者模式(mediator)

    **中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...

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

    **中介者模式(Mediator Pattern)**是一种行为设计模式,其主要目的是降低多个对象之间的通信复杂性,将这些对象的直接交互转化为与一个中心对象——中介者的交互。在C#中,中介者模式的应用能够有效地减少类之间的...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    中介者模式(Mediator Pattern)原理图

    中介者模式(Mediator Pattern)是一种行为型设计模式,用于减少对象之间的直接相互依赖,使得对象间的交互通过一个中介者对象来进行协调。在中介者模式中,对象之间不再直接相互调用,而是通过中介者对象来传递消息...

    设计模式_行为模式

    5. 中介者模式(Mediator):中介者模式用一个中介对象来封装一系列的对象交互,使得这些对象不需要显式地相互引用,从而降低耦合度。在多对象协作的场景中,中介者起到通信桥梁的作用。 6. 备忘录模式(Memento)...

    Mediator 中介模式Java版

    中介模式是一种行为设计模式,它定义了一个单独的对象,该对象负责协调多个相关对象之间的交互,使得这些对象无需相互引用,降低了耦合度。在Java编程中,中介模式的应用能够有效地解决复杂系统中对象间的通信问题,...

Global site tag (gtag.js) - Google Analytics