- 浏览: 102676 次
- 性别:
- 来自: 深圳
文章分类
最新评论
Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,Mediator模式定义一个“中介”对象来封装对象的交互行为。
本文介绍设计模式中的(Mediator)模式的概念,用法,以及实际应用中怎么样使用Mediator模式进行开发。
Mediator模式的概念
Mediator模式是行为模式之一,Mediator模式定义一个对象来封装对象的交互行为。从而降低对象间的耦合程度。
在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。
在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。
Mediator模式的应用场景与利点
当多个类之间相互依存,互相调用,关系过于复杂时,可以考虑使用Mediator模式来简化它们之间的关系。
使用Mediator模式时的优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
使用Mediator模式时的优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
Mediator模式的应用范例
下面,我们使用Mediator模式模拟男孩女孩找对象的行为:在Boy类中,需要调用Girl类的方法;相反,在Girl类中,也需要调用Boy类的方法。所以我们采用Mediator模式来实现这个过程。
文件一览:
Client
测试类
Mediator
Mediator中介者类,这里省略了抽象类
Person
关联类(Boy, Girl)的抽象类。关联类之间并不一定需要共享一个父类,这里为了方便,为他们抽象出一个Person类
Boy
关联类之Boy,跟Girl类相关联
Girl
关联类之Girl,跟Boy类相关联
代码:
文件一览:
Client
测试类
Mediator
Mediator中介者类,这里省略了抽象类
Person
关联类(Boy, Girl)的抽象类。关联类之间并不一定需要共享一个父类,这里为了方便,为他们抽象出一个Person类
Boy
关联类之Boy,跟Girl类相关联
Girl
关联类之Girl,跟Boy类相关联
代码:
public class Client {
/**
* Test Mediator Pattern
*/
public static void main(String[] args) {
//婚姻中介所开张了
Mediator mediator = new Mediator();
//一个名为Zhangshan的男孩,条件为80
Boy zhangshan = new Boy(mediator, "Zhangshan", 80);
Girl lili = new Girl(mediator, "Lili", 80);
//如果条件符合,则partner成立
zhangshan.findPartner(lili);
//一个名为lanlan的女孩,条件为90
Girl lanlan = new Girl(mediator, "lanlan", 90);
lanlan.findPartner(zhangshan);
}
}
/**
* 关联类(Boy, Girl)的抽象类
* 关联类之间并不一定需要共享一个父类,这里为了方便,为他们抽象出一个Person类
*/
abstract class Person {
//姓名
String name;
//条件
int condition;
//中介者(不管男孩还是女孩,都需要知道中介者,通过中介者去找对象)
Mediator mediator;
public Person(Mediator mediator, String name, int condition) {
this.mediator = mediator;
this.name = name;
this.condition = condition;
}
public abstract boolean findPartner(Person person);
public int getCondition() {
return condition;
}
public void setCondition(int condition) {
this.condition = condition;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 关联类之Boy,跟Girl类相关联
* 男孩
*
*/
class Boy extends Person {
public Boy(Mediator mediator, String name, int condition) {
super(mediator, name, condition);
//注册自己
mediator.registBoy(this);
}
@Override
public boolean findPartner(Person person) {
System.out.println("Boy try to find girl.");
return mediator.findPartner(person);
}
}
/**
* 关联类之Girl,跟Boy类相关联
* 女孩
*
*/
class Girl extends Person {
public Girl(Mediator mediator, String name, int condition) {
super(mediator, name, condition);
//注册自己
mediator.registGirl(this);
}
@Override
public boolean findPartner(Person person) {
System.out.println("Girl try to find boy.");
return mediator.findPartner(person);
}
}
/**
* Mediator
* 婚姻中介者
*
*/
class Mediator {
Boy boy;
Girl girl;
//男孩注册
public void registBoy(Boy boy) {
this.boy = boy;
}
//女孩注册
public void registGirl(Girl girl) {
this.girl = girl;
}
//根据各自的条件匹配
public boolean findPartner(Person person) {
if (person instanceof Boy) {
this.boy = (Boy) person;
} else {
this.girl = (Girl) person;
}
boolean ret = this.boy.getCondition() == this.girl.getCondition();
System.out.println(this.boy.getName() + " & " + this.girl.getName() + " is partner: " + ret);
return ret;
}
}
/**
* Test Mediator Pattern
*/
public static void main(String[] args) {
//婚姻中介所开张了
Mediator mediator = new Mediator();
//一个名为Zhangshan的男孩,条件为80
Boy zhangshan = new Boy(mediator, "Zhangshan", 80);
Girl lili = new Girl(mediator, "Lili", 80);
//如果条件符合,则partner成立
zhangshan.findPartner(lili);
//一个名为lanlan的女孩,条件为90
Girl lanlan = new Girl(mediator, "lanlan", 90);
lanlan.findPartner(zhangshan);
}
}
/**
* 关联类(Boy, Girl)的抽象类
* 关联类之间并不一定需要共享一个父类,这里为了方便,为他们抽象出一个Person类
*/
abstract class Person {
//姓名
String name;
//条件
int condition;
//中介者(不管男孩还是女孩,都需要知道中介者,通过中介者去找对象)
Mediator mediator;
public Person(Mediator mediator, String name, int condition) {
this.mediator = mediator;
this.name = name;
this.condition = condition;
}
public abstract boolean findPartner(Person person);
public int getCondition() {
return condition;
}
public void setCondition(int condition) {
this.condition = condition;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 关联类之Boy,跟Girl类相关联
* 男孩
*
*/
class Boy extends Person {
public Boy(Mediator mediator, String name, int condition) {
super(mediator, name, condition);
//注册自己
mediator.registBoy(this);
}
@Override
public boolean findPartner(Person person) {
System.out.println("Boy try to find girl.");
return mediator.findPartner(person);
}
}
/**
* 关联类之Girl,跟Boy类相关联
* 女孩
*
*/
class Girl extends Person {
public Girl(Mediator mediator, String name, int condition) {
super(mediator, name, condition);
//注册自己
mediator.registGirl(this);
}
@Override
public boolean findPartner(Person person) {
System.out.println("Girl try to find boy.");
return mediator.findPartner(person);
}
}
/**
* Mediator
* 婚姻中介者
*
*/
class Mediator {
Boy boy;
Girl girl;
//男孩注册
public void registBoy(Boy boy) {
this.boy = boy;
}
//女孩注册
public void registGirl(Girl girl) {
this.girl = girl;
}
//根据各自的条件匹配
public boolean findPartner(Person person) {
if (person instanceof Boy) {
this.boy = (Boy) person;
} else {
this.girl = (Girl) person;
}
boolean ret = this.boy.getCondition() == this.girl.getCondition();
System.out.println(this.boy.getName() + " & " + this.girl.getName() + " is partner: " + ret);
return ret;
}
}
执行Client,输出结果:
C:\Mediator>javac *.java
C:\Mediator>java Client
Boy try to find girl.
Zhangshan & Lili is partner: true
Girl try to find boy.
Zhangshan & lanlan is partner: false
C:\Mediator>
C:\Mediator>java Client
Boy try to find girl.
Zhangshan & Lili is partner: true
Girl try to find boy.
Zhangshan & lanlan is partner: false
C:\Mediator>
发表评论
-
设计模式之 State - 状态模式
2010-12-18 16:49 1116State模式也叫状态模式,是由GoF提出的23种软件设计模式 ... -
设计模式之 Strategy - 策略模式
2010-12-18 16:46 1385Strategy模式也叫策略模 ... -
设计模式之 Visitor - 访问者模式
2010-12-18 16:45 1480Visitor模式也叫访问者 ... -
设计模式之 Template Method - 模板方法模式
2010-12-18 16:41 1600Template Method模式也叫模板方法模式,是由G ... -
设计模式之 Observer - 观察者模式
2010-12-18 16:33 1433Observer模式也叫观察者 ... -
设计模式之 Memento - 备忘录模式
2010-12-18 16:31 1086Memento模式也叫备忘录 ... -
设计模式之 Iterator - 迭代模式
2010-12-18 16:27 1195Iterator模式也叫迭代模式,是由GoF提出的23种设 ... -
设计模式之 Interpreter - 解释器模式
2010-12-18 16:23 1029Interpreter模式也叫解释器模式,是由GoF提出的 ... -
设计模式之 Command - 命令模式
2010-12-18 16:20 913Command(CoR)模式也叫命 ... -
设计模式之 Chain of Responsibility - 职责链模式
2010-12-18 16:18 1230Chain of Responsibility(CoR)模 ... -
设计模式之 Proxy - 代理模式
2010-12-16 23:45 1085Proxy模式也叫代理模式,是由GoF提出的23种软件设计 ... -
设计模式之 Flyweight - 享元模式
2010-12-16 23:42 1077Flyweight模式也叫享元模式,是由GoF提出的23种 ... -
设计模式之 Facade - 外观模式
2010-12-16 23:41 1036Facade模式也叫外观模式 ... -
设计模式之 Singleton - 单态模式
2010-11-26 11:58 883Singleton模式也叫单态模式,是由GoF提出的2 ... -
设计模式之 Decorator - 装饰模式
2010-11-25 23:48 834装饰模式,The Decorator Pattern atta ... -
设计模式之 Composite - 组合模式
2010-11-25 23:35 1490Composite模式也叫组合 ... -
设计模式之 Bridge - 桥接模式
2010-11-25 23:08 1041Bridge模式也叫桥接模式,是由GoF提出的23种软件设计模 ... -
设计模式之 Adapter - 适配器模式
2010-11-25 22:58 947Adapter模式也叫适配器模式,是由GoF提出的23种设 ... -
设计模式之Prototype - 原型模式
2010-11-25 22:14 1162Prototype模式也叫原型模式,是由GoF提出的23种设计 ... -
设计模式之 Builder - 建造者模式
2010-11-18 23:51 1090Builder模式也叫建造者模式或者生成器模式,是由GoF ...
相关推荐
在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,其中中介者模式是结构型设计模式的一种。它的主要目标是降低对象之间的耦合度,使得对象之间的关系更加清晰,同时也提高了代码的可维护性和可扩展...
- 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的状态,并在该对象之外保存这个状态,以便以后恢复。 - 观察者模式...
**设计模式之中介者模式(Mediator Pattern)** 在软件工程中,设计模式是一种解决常见问题的经验总结,它提供了一种可复用的解决方案。中介者模式是行为设计模式之一,其主要目的是降低多个对象之间的复杂性,通过...
**中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
- **《设计模式:可复用面向对象软件的基础》**,由Erich Gamma等人合著,是设计模式领域的经典之作,详细介绍了包括中介者模式在内的23种设计模式。 - **《面向对象分析与设计》**,由Grady Booch编写,提供了面向...
**中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...
5. 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 6. 观察者模式(Observer):当对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 7. 状态模式(State):允许一个对象...
### C++设计模式之Mediator(中介者)详解 #### 一、引言 在软件开发过程中,随着系统的复杂度逐渐增加,各个组件之间的交互变得越来越频繁,这不仅增加了系统的耦合度,还使得系统维护变得困难重重。为了解决这一...
GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...
C#面向对象设计模式 (行为型模式) Mediator 中介者模式 视频讲座下载
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: ...设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...
- 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复...
中介者模式的完整代码。 程序默认使用vs开发。其他开发工具可能需要做少许调整。
7. **Mediator模式**:Mediator模式是一种行为设计模式,定义了一个接口,用于在各对象之间进行通信,降低了对象之间的耦合性,使得对象之间的交互更加灵活。 8. **Memento模式**:Memento模式是用于保存对象状态的...
**中介者模式(Mediator)**是一种设计模式,属于行为设计模式范畴,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在软件工程中,中介者模式常...
c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式...
中介者模式是一种行为设计模式,它的主要目标是减少对象之间的耦合性,通过引入一个中介对象来协调多个对象之间的交互。在传统的多对象交互场景中,对象之间可能存在复杂的依赖关系,这会导致代码难以理解和维护。...
中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...