`

设计模式之 Mediator - 中介者模式

阅读更多

Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,Mediator模式定义一个“中介”对象来封装对象的交互行为。

本文介绍设计模式中的(Mediator)模式的概念,用法,以及实际应用中怎么样使用Mediator模式进行开发。

Mediator模式的概念
Mediator模式是行为模式之一,Mediator模式定义一个对象来封装对象的交互行为。从而降低对象间的耦合程度。
在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。

Mediator模式的应用场景与利点
当多个类之间相互依存,互相调用,关系过于复杂时,可以考虑使用Mediator模式来简化它们之间的关系。

使用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类相关联

代码:
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;
    }
}



执行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>
分享到:
评论

相关推荐

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

    中介者模式(Mediator) 用意:用一个中介对象来封装一系列对象间的交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

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

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

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

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

    JAVA设计模式chm文档

    创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: ...设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    设计模式 Mediator 中介者 c++

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

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

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

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

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

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

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

    java版本二十三种设计模式.zip

    <!-- TOC --> - 23种设计模式 ... - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式(Interpreter) - 迭代器模式(Iterator) - 备忘录模式(Memento) - 状态模式(S

    设计模式文档 chm

    设计模式参考文档 创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

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

    Mediator 中介者模式 若有问题,烦请指出。

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

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

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

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

    设计模式精解-GoF 23种设计模式解析

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 0.3 与作者联系 1 创建型模式 1.1 Factory模式 1.2 AbstactFactory模式 1.3 Singleton...

    设计模式--C++

    5.5 MEDIATOR(中介者)—对象行为型模式 181 5.6 MEMENTO(备忘录)—对象行为型模式 188 5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码.pdf

    设计模式精解- GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ...........................................................................................................................................

    JavaScript 设计模式 azw3

    然后,集中介绍了很多流行的设计模式在JavaScript中的应用,包括Module(模块)模式、Observer(观察者)模式、Facade(外观)模式和Mediator(中介者)模式;最后,还探讨了模块化的JavaScript模式、jQuery及其插件...

    运用Mediator设计模式的登录对话框

    该案例改编自结城浩《设计模式-java语言中的应用》一书。 This is a program about a login dialog, wich try to illustrate the design pattern of Mediator. The program adapt from the book 《design pattern:...

    C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例

    主要介绍了C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题,简单说明了中介者模式的定义并结合七夕缘分问题实例分析了中介者模式的具体使用技巧,需要的朋友可以参考下

    mediator模式

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

Global site tag (gtag.js) - Google Analytics