首页 > 其他分享 >21-中介者模式

21-中介者模式

时间:2023-03-02 14:35:26浏览次数:37  
标签:Colleague 21 mediator void 模式 中介 message public

21-中介者模式

概念

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

优缺点:
中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了"多对多"交互复杂度的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理
中介者模式的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator,由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏观的额角度去看待系统
由于concreteMediator控制了集中化,于是就交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个concreteColleague都复杂
中介者模式一般应用于一组对象已定义良好但是复杂的方式进行同心度额场合,以及想定制一个分部在多个类中行为,又不想审查隔行太多子类的场合

举例

package com.gof.mediator;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
public abstract class Mediator {
    public abstract void send(String message, Colleague colleague);
}
package com.gof.mediator;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConcreteMediator extends Mediator {
    private ConcreteColleague1 colleague1;

    private ConcreteColleague2 colleague2;

    @Override
    public void send(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.notify(message);
        } else {
            colleague1.notify(message);
        }
    }
}

package com.gof.mediator;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
public abstract class Colleague {
    protected Mediator mediator;

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

    public void send(String message) {
        mediator.send(message, this);
    }

    public abstract void notify(String message);
}
package com.gof.mediator;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
public class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message) {
        System.out.println("同事1得到消息:" + message);
    }
}
package com.gof.mediator;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
public class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void notify(String message) {
        System.out.println("同事2得到消息:" + message);
    }
}
package com.gof.mediator;

/**
 * 功能描述
 *
 * @since 2023-03-02
 */
public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("帮小菜装一下电脑");
        colleague2.send("好的");

    }
}

标签:Colleague,21,mediator,void,模式,中介,message,public
From: https://www.cnblogs.com/Oh-mydream/p/17171665.html

相关文章

  • 轻松玩转makefile | 变量与模式
    前言本文通过简单的几个示例,以及对同一个Makefile进行几个版本的迭代,帮助快速的理解变量和模式规则的使用。1、回顾在上一篇文章中,我们使用Makefile编译fun.c和main.c这......
  • 设计模式与前端工程师
     前端要不要学习设计模式始终认为每个行业都有自己的特点,各自的专业性。一个开发工程师如果不知道电脑是哪些基本硬件组成,那么我们大概率都会认为这个人非常不专业。......
  • JAVA设计模式之单例模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及......
  • WebLogic JNDI注入(CVE-2021-2109)
    0x01前言学习一下WebLogicJNDI注入RCE(CVE-2021-2109)0x02环境搭建和之前WebLogic的环境搭建是一致的,本文不再赘述。不过值得一提的是,我的weblogic版本是10.3......
  • 设计模式2——创建者模式
    ​创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为:......
  • 解释器模式
    解释器模式是一种行为型设计模式,它可以用来定义和解释一种语言的文法,并根据文法对句子进行解释。解释器模式通常用于编译器,表达式计算,正则表达式,机器人等领域。它的基本思......
  • Redis哨兵模式
    含义反客为主的自动版,检测主服务器是否宕机,如果宕机后会立即选择一个主服务器下的从服务器再当选主服务器  操作步骤1. 配置哨兵,填写内容自定义的/myredis目录下......
  • js异步编程的三种模式
    写在前面javascript语言的执行环境是"单线程"(singlethread),就是指一次只能完成一件任务。如果有多个任务,就必须排队,等前面一个任务完成,再执行后面一个任务,以此类推。......
  • 全球土地利用数据ESRI 10m Annual Land Use Land Cover (2017-2021)介绍及下载
    ESRILandCover10m(2017-2021)土地利用数据介绍及下载数据介绍参考链接:https://livingatlas.arcgis.com/landcover/https://gee-community-catalog.org/projects/e......
  • 调度器46—tick模式
    一、tick简介tick就是一个周期性的中断,周期通过CONFIG_HZ进行配置,一般常取值为100Hz、250Hz、1000Hz。Tick每秒窃取CPU100到1000次,导致Icache、dcache定期被丢弃......