概述
-
消息队列(生产者-消费者模型)是Java多线程编程中的一个经典问题,主要描述的是生产者和消费者在同一时间段内共用一块存储空间(通常也称为缓冲区),工作时,生产者向缓冲区存放数据,而消费者则从缓冲区中取走数据。
-
策略模式 是一种行为型模式,定义了一系列的算法,并将每一个算法封装,并且使它们可相互替换。主要解决在有多种算法相似的情况下,使用 if…else 所带来的复杂体现且难以维护的问题。
抽象策略类(Strategy):定义一个所有算法都支持的通用接口,内容类使用这个接口调用由具体策略实现的算法。
具体策略类(OperationA、OperationB、OperationC…):实现相应的算法。
内容类(Context):封装具体的算法实现,提供外部调用方式(上层的调用需要与接口之间有一定的交互)。 -
本文demo主要功能及角色
消息队列主要功能包括:消息的发送、缓存和接收;主要角色为MsgBox、Producer、Consumer
策略模式主要功能包括:消息策略的封装,提供上层调用的方式;主要角色为Context、Strategy、Message(对应具体策略类) -
消息队列简单关系模型
-
策略模式uml图
-
项目结构
为方便理解,博主将分为策略模式和消息队列两部分进行讲解
- 策略模式部分
定义接口Strategy
package com.me.msg;
public interface Strategy {
void doStrategyWork();
}
定义四个具体策略类(用于模拟不同的消息类型,以PhotoMessageStrategy为例,余下三种大体相同稍作修改即可)
package com.me.msg;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PhotoMessageStrategy implements Strategy{
SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void doStrategyWork() {
System.out.println("查阅一则图片消息!\t"+df.format(new Date()));
}
}
消息类Message(对应四种不同消息类型)
package com.me.msg;
public class Message {
private String cmd;
public String getCmd() {
return cmd;
}
public void setCmd(String cmd) {
this.cmd