从特工的角度来看设计模式之中介者模式

  转载请声明:http://www.cnblogs.com/courtier/p/4292201.html

  • 中介者模式简介:

       多个类之间的通讯方式封装成一个对象,只能,从这个对象转发给多个类。

      

  • 从代码的角度来理解(特工与特工之间只能通过情况报站(MEDIATOR)来交换信息)
package mediator;
//特工类
public abstract class ColleaugeAgent {
    //特工必须是相互是不能认识的,不能交流的,不能说话,只有,通过情报站,所以,每个特工都有情报站
    private MediatorIn mediatorIn;

    public ColleaugeAgent(MediatorIn mediatorIn)
    {
        this.mediatorIn = mediatorIn;
    }

    protected MediatorIn getAgentOfLocation()
    {
        return mediatorIn;
    }
}
  • 特工A:
package mediator;
//特工A
public class ColleaugeAgentA extends ColleaugeAgent{

    public ColleaugeAgentA(MediatorIn mediatorIn) {
        super(mediatorIn);
        // TODO Auto-generated constructor stub
    }

    //我想去通知特工B
    public void notifyB(ColleaugeAgentB agentB)
    {
        //得到情报站,然后,给情报
        getAgentOfLocation().notifyOtheragent(agentB);
    }

    public void getMsg()
    {
        System.out.println("A:我被知道有任务了,但是,我不知道是谁通知我的");
    }

}
  • 特工B:
package mediator;
//特工A
public class ColleaugeAgentB extends ColleaugeAgent{

    public ColleaugeAgentB(MediatorIn mediatorIn) {
        super(mediatorIn);
        // TODO Auto-generated constructor stub
    }

    //我想去通知特工A
    public void notifyA(ColleaugeAgentA agentA)
    {
        //得到情报站,然后,给情报
        getAgentOfLocation().notifyOtheragent(agentA);
    }

    public void getMsg()
    {
        System.out.println("B:我被知道有任务了,但是,我不知道是谁通知我的");
    }
}
  • 情报站:
package mediator;

public interface MediatorIn {
    //通知到特工类
    void notifyOtheragent(ColleaugeAgent colleaugeAgent);
}
package mediator;
//情报站必须持有特工名单,不然,怎么通知呢?
public class ConcreteMediator implements MediatorIn{
    private ColleaugeAgentA colleaugeAgentA;
    private ColleaugeAgentB colleaugeAgentB;

    public void setColleaugeAgentA(ColleaugeAgentA colleaugeAgentA) {
        this.colleaugeAgentA = colleaugeAgentA;
    }

    public void setColleaugeAgentB(ColleaugeAgentB colleaugeAgentB) {
        this.colleaugeAgentB = colleaugeAgentB;
    }

    //通知其他特工
    @Override
    public void notifyOtheragent(ColleaugeAgent colleaugeAgent) {
        // TODO Auto-generated method stub
        if ( colleaugeAgent instanceof ColleaugeAgentA)
        {
            colleaugeAgentB.getMsg();
        }
        else
        {
            colleaugeAgentA.getMsg();
        }
    }

}
  • 运行结果:

(源代码:https://github.com/aliencool/Design-Pattrn/tree/master/mediator)

  • 结束语:

       中介者模式是GOF经典模式之一,主要用于反射的INVOKE

时间: 2024-10-10 15:21:00

从特工的角度来看设计模式之中介者模式的相关文章

从七龙珠的角度来看设计模式之享元模式

       转载请声明:http://www.cnblogs.com/courtier/p/4290327.html 人话:        享元模式:运用共享技术解决大量对象的问题! 前言:        我所知道的设计模式最难的四大模式之一:享元模式,其他三个分别是:生成器模式,桥接模式,解释器模式! 应用场景:JAVA 字符串内存池.(经常有些面试官问 string 是不是同一对象,其实就是考察享元模式) •Flyweight — 描述一个接口,通过这个接口Flyweight可以接受并作用

【设计模式】——中介者模式

中介者模式(Mediator),用一个中介者对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. Colleague叫做抽象同事类,而ConcreteColleague是具体同事类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象,Mediator是抽象中介者,定义了同事对象到中介者对象的接口,ConcreteMediator是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接

折腾Java设计模式之中介者模式

博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 通俗点来讲就是提供一个中介平台,说到平台,那其实很容易联系到我们很熟悉的房地产中介.我们可以直接通过这个平台得到我们想要的信息,不用对象自身与其他对象交互. 买房子租房子就不需要去找房东,只需要在中介那里获取相应的×××信息.如下图那样,两方只

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

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式之中介者模式20170731

行为型设计模式之中介者模式: 一.含义 用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 同事角色与其他同时角色通信的时候,一定要通过中介者角色(中介者封装了各个同事类之间的逻辑关系) 二.代码说明 1.主要有两个角色 1)中介者角色 通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色. 2)同事角色 每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作. 每个同事类的行为分

设计模式(中介者模式-对象去耦)

声明:本系列文章内容摘自<iOS设计模式> 中介者模式 用一个对象来封装一系列对象的交互方式.中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 何时使用中介者模式 1.对象间的交互虽定义明确然而非常复杂,导致椅子对象彼此相互依赖而且难以理解: 2.因为对象引用了许多其他对象并与其通信,导致对象难以复用: 3.想要制定一个分布在多个对象中的逻辑或行为,又不想生成太多子类. 举个例子 有三个视图,我们可能需要两两之间进行跳转,类比于公司内同时每两个人都有可能

设计模式之: 中介者模式

一.前言 平常我们写一个聊天软件,如果我们只是各个客户端之间连接聊天,那估计我们会写的想哭,那如果我们用服务器作为中间媒介,通过服务器来完成转发,群聊等客户端之间的连接,那样我们就可以最大程度的为各个客户端之间解耦,把它们之间的通信方法抽出来单独实现, 如图1就是不使用中介媒体的时候的结构图: 如图2就是使用我们所说的服务器作为中间媒介的情况的结构图: 二.中介模式 图二就是我们所说的中介模式! 在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装

大话设计模式_中介者模式(Java代码)

中介者模式:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 简单描述:1个抽象Colleague,其派生多个具体ConcreteColleague,每个具体ConcreteColleague都认识一个具体中介者.他们发送消息的时候是通过中介者发送.1个中介者,具体中介者认识所有的ConcreteColleague(即持有所有具体ConcreteColleague的引用),它提供向其他具体ConcreteColleag

Java 设计模式之中介者模式

本文继续23种设计模式系列之中介者模式. 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 角色 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对