设计模式——中介者模式(Mediator Pattern)+ JDK相关源码

文章目录

  • 一、中介者模式(Mediator Pattern)
    • 别名:调停者模式
    • 类型:行为型模式
    • 功能:
  • 二、例子
    • 1、菜鸟教程例子
      • 1.1 定义ChatRoom
      • 1.2 定义User 用户
      • 1.3 使用
    • 2、JDK源码——Timer
  • 四、其他设计模式

一、中介者模式(Mediator Pattern)

别名:调停者模式

类型:行为型模式

功能:

提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
从而降低多个对象和类之间的通信复杂性。

二、例子

1、菜鸟教程例子

菜鸟教程是举了一个聊天室的例子。
菜鸟教程——中介者模式
我做了点小改动,但意思是一样。

1.1 定义ChatRoom

这个ChatRoom 就是中介者,专门去处理User的通讯。

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

1.2 定义User 用户

public class User {
   private String name;

   public User(String name){
      this.name  = name;
   }
 
   public void sendMessage(String message){
      ChatRoom.showMessage(this, message);
   }
}

1.3 使用

public class MediatorPatternDemo {
   public static void main(String[] args) {
      User 张三 = new User("张三");
      User 李四 = new User("李四");
 
      张三.sendMessage("Hi! 李四!");
      李四.sendMessage("Hi! 张三!");
   }
}

2、JDK源码——Timer

中介者:Timer
Timer 会维护一个TaskQueue 。
添加TimerTask时会调用sched方法,该方法notify通知唤醒队列里的任务。

public class Timer {
	private final TaskQueue queue = new TaskQueue();
	
	private void sched(TimerTask task, long time, long period) {
	      if (time < 0)
	          throw new IllegalArgumentException("Illegal execution time.");
	
	      // Constrain value of period sufficiently to prevent numeric
	      // overflow while still being effectively infinitely large.
	      if (Math.abs(period) > (Long.MAX_VALUE >> 1))
	          period >>= 1;
	
	      synchronized(queue) {
	          if (!thread.newTasksMayBeScheduled)
	              throw new IllegalStateException("Timer already cancelled.");
	
	          synchronized(task.lock) {
	              if (task.state != TimerTask.VIRGIN)
	                  throw new IllegalStateException(
	                      "Task already scheduled or cancelled");
	              task.nextExecutionTime = time;
	              task.period = period;
	              task.state = TimerTask.SCHEDULED;
	          }
	
	          queue.add(task);
	          if (queue.getMin() == task)
	              queue.notify();
	      }
	  }
}

四、其他设计模式

创建型模式
结构型模式

  • 1、设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码

行为型模式

  • 1、设计模式——访问者模式(Visitor Pattern)+ Spring相关源码

你可能感兴趣的:(Programming,Concepts,java,设计模式,中介者模式,mediator)