中介者模式 rust和java的实现

简介: 中介者模式 rust和java的实现

中介者模式

中介者模式(Mediator Pattern)又被称为 调停者模式 。 它定义了一个中介对象来封装一系列对象之间的交互关系。 中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。 它是一种对象行为型模式。

介绍

  • 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  • 作用:1.通过中介者提供的中转作用,各个同事对象就不再需要显式引用其他同事,当需要和其他同事进行通信时,通过中介者即可。该中转作用属于中介者在结构上的支持。2.中介者可以更进一步的对同事之间的关系进行封装,同事可以一致地和中介者进行交互,而不需要指明中介者需要具体怎么做,中介者根据封装在自身内部的协调逻辑,对同事的请求进行进一步处理,将同事成员之间的关系行为进行分离和封装。该协调作用属于中介者在行为上的支持。
  • 应用实例: 1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。 2、机场调度系统。 3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。

实现

我们通过聊天室实例来演示中介者模式。实例中,多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。我们将创建两个类 ChatRoom 和 User。User 对象使用 ChatRoom 方法来分享他们的消息。

MediatorPatternDemo,我们的演示类使用 User 对象来显示他们之间的通信。

中介者模式的 UML

java

步骤 1

创建中介类。

ChatRoom.java

import java.util.Date;
public class ChatRoom {
   public static void showMessage(User user, String message){
      System.out.println(new Date().toString()
         + " [" + user.getName() +"] : " + message);
   }
}

步骤 2

创建 user 类。

User.java

public class User {
   private String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public User(String name){
      this.name  = name;
   }
   public void sendMessage(String message){
      ChatRoom.showMessage(this,message);
   }
}

步骤 3

使用 User 对象来显示他们之间的通信。

MediatorPatternDemo.java
public class MediatorPatternDemo {
   public static void main(String[] args) {
      User robert = new User("Robert");
      User john = new User("John");
      robert.sendMessage("Hi! John!");
      john.sendMessage("Hello! Robert!");
   }
}

rust

在rust中,使用日期库需要引入第三方库,所以需要我们在Cargo.toml引入chrono = "0.4.31"

trait Image {
    fn dispaly(&self);
}
struct RealImage{
    file_name:String,
}
impl RealImage {
    fn load_from_disk(&self) {
        println!("Loading {}",self.file_name)
    }
    fn new(file_name:String)->RealImage {
        let i=RealImage { file_name:file_name.clone() };
        i.load_from_disk();
        i
    }
}
impl Image for RealImage {
    fn dispaly(&self) {
        println!("Displaying  {}",self.file_name.as_str())
    }
}
struct  ProxyImage{
    real_image: RealImage,
    file_name:String
}
impl ProxyImage {
    fn new(file_name:String)->ProxyImage {
        ProxyImage{
            real_image:RealImage::new(file_name.clone()),
            file_name:file_name
        }
    }
}
impl Image for ProxyImage {
    fn dispaly(&self) {
        self.real_image.dispaly();
    }
}
fn main() {
    let pi=ProxyImage::new("test_10mb.jpg".to_string());
    pi.dispaly();
    pi.dispaly();
}

rust仓库

https://github.com/onenewcode/design.git

本教程项目在bin文件夹下的memento.rs文件中


相关文章
|
1月前
|
设计模式 前端开发 Java
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
文章详细介绍了中介者模式(Mediator Pattern),这是一种对象行为型模式,用于封装一系列对象的交互,降低系统耦合度,并简化对象之间的交互关系。通过案例分析、结构图、时序图和代码示例,文章展示了中介者模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
|
3月前
|
设计模式 Java 程序员
Java设计模式之中介者模式详解
Java设计模式之中介者模式详解
|
4月前
|
设计模式 Java
23种设计模式,中介者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
63 8
|
4月前
|
Rust 安全 Java
Rust与Java:性能与效率的较量
本文将对比Rust和Java两种编程语言在性能和效率方面的差异。我们将探讨Rust如何通过其独特的内存管理、并发模型和编译时优化来实现高性能,同时分析Java如何在虚拟机(JVM)的支持下实现高效运行。通过比较这两种语言的特性和应用场景,我们可以为开发者在选择编程语言时提供有益的参考。
|
4月前
|
Rust Java Linux
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
174 0
|
4月前
|
设计模式 Java
Java设计模式【十八】:中介者模式
Java设计模式【十八】:中介者模式
35 0
|
4月前
|
存储 Rust Java
备忘录模式 rust和java的实现
备忘录模式 rust和java的实现
42 0
|
4月前
|
设计模式 Rust Java
组合模式 rust和java的实现
组合模式 rust和java的实现
82 0
|
6天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
17天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
79 6
【Java学习】多线程&JUC万字超详解