This commit is contained in:
wyl
2022-05-14 21:34:41 +08:00
parent 33a58e8aac
commit 45d4c2604f
9 changed files with 160 additions and 11 deletions
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>JavaBasiceDemo</artifactId>
<groupId>com.wyl.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>chain-of-responsibility</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
@@ -0,0 +1,20 @@
package com.wyl.chain;
/**
* 责任链设计模式
* @ClassName: Handler
* @Date: 2022/4/24 9:43 下午
* @author wangyl
* @version V1.0
*/
public interface Handler {
/**
* 处理数据的借口
* @param date
* @return java.lang.Boolean
* @Date 2022/4/24 9:43 下午
* @Author wangyl
* @Version V1.0
*/
Boolean handleData(String date);
}
@@ -0,0 +1,23 @@
package com.wyl.chain;
import java.util.LinkedList;
import java.util.List;
public class HandlerChain {
private List<Handler> handlers = new LinkedList<>();
public void add(Handler handler) {
handlers.add(handler);
}
public void handle(String data) {
for (Handler handler : handlers){
Boolean aBoolean = handler.handleData(data);
if (!aBoolean){
System.out.println("数据处理失败结束");
break;
}
}
}
}
@@ -0,0 +1,27 @@
package com.wyl.chain.handler;
import com.wyl.chain.Handler;
/**
* 第一个处理
* @ClassName: FirstHandler
* @Date: 2022/4/24 9:59 下午
* @author wangyl
* @version V1.0
*/
public class FirstHandler implements Handler {
@Override
public Boolean handleData(String date) {
if (date.startsWith("First")) {
System.out.println("第一处理器开始处理。。。");
if (date.length() < 6) {
throw new RuntimeException("数据长度不够");
}
System.out.println("第一处理器处理完毕。。。");
return true;
}
System.out.println("无需第一处理");
return false;
}
}
@@ -0,0 +1,27 @@
package com.wyl.chain.handler;
import com.wyl.chain.Handler;
/**
* 第二处理器
* @ClassName: SecondHandler
* @Date: 2022/4/24 10:03 下午
* @author wangyl
* @version V1.0
*/
public class SecondHandler implements Handler {
@Override
public Boolean handleData(String date) {
if (date.endsWith("Second")) {
System.out.println("第二处理器开始处理。。。");
if (date.length() < 10) {
throw new RuntimeException("第二处理数据长度不够");
}
System.out.println("第二处理器处理完成。。。");
return true;
}
System.out.println("无需第二处理");
return false;
}
}
@@ -0,0 +1,17 @@
package com.wyl.chain;
import com.wyl.chain.handler.FirstHandler;
import com.wyl.chain.handler.SecondHandler;
public class ChainTest {
public static void main(String[] args) {
HandlerChain chain = new HandlerChain();
chain.add(new FirstHandler());
chain.add(new SecondHandler());
// chain.handle("First");
// chain.handle("First123123");
// chain.handle("First123123Second");
chain.handle("123123Second");
}
}
@@ -2,27 +2,35 @@ package concurrent.queue;
import lombok.Data;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* 订单信息
* 延迟队列
* @ClassName: Order
* @Date: 2022/4/8 13:57
* @author wangyl
* @version V1.0
*/
@Data
public class Order implements Delayed {
public class DelayedQueue implements Delayed {
/**
* 延迟时间
*/
private long time;
/**
* 延迟任务名称
*/
private String name;
private String timestamp = System.currentTimeMillis() + "";
/**
* 延迟任务创建时间
*/
private String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
public Order(String name, long time, TimeUnit unit) {
public DelayedQueue(String name, long time, TimeUnit unit) {
this.name = name;
this.time = System.currentTimeMillis() + (time > 0 ? unit.toMillis(time) : 0);
}
@@ -34,7 +42,7 @@ public class Order implements Delayed {
@Override
public int compareTo(Delayed o) {
Order Order = (Order) o;
DelayedQueue Order = (DelayedQueue) o;
long diff = this.time - Order.time;
if (diff <= 0) {
return -1;
@@ -8,12 +8,20 @@ import java.util.concurrent.DelayQueue;
import java.util.concurrent.TimeUnit;
public class DelayQueueTest {
/**
* 系统自带延时队列测试
* @param
* @return void
* @Date 2022/4/9 11:40 下午
* @Author wangyl
* @Version V1.0
*/
@Test
public void delayQueueTest() throws InterruptedException {
Order Order1 = new Order("Order1", 5, TimeUnit.SECONDS);
Order Order2 = new Order("Order2", 10, TimeUnit.SECONDS);
Order Order3 = new Order("Order3", 15, TimeUnit.SECONDS);
DelayQueue<Order> delayQueue = new DelayQueue<>();
DelayedQueue Order1 = new DelayedQueue("Order1", 5, TimeUnit.SECONDS);
DelayedQueue Order2 = new DelayedQueue("Order2", 10, TimeUnit.SECONDS);
DelayedQueue Order3 = new DelayedQueue("Order3", 15, TimeUnit.SECONDS);
DelayQueue<DelayedQueue> delayQueue = new DelayQueue<>();
delayQueue.put(Order1);
delayQueue.put(Order2);
delayQueue.put(Order3);
@@ -24,8 +32,7 @@ public class DelayQueueTest {
/**
* 取队列头部元素是否过期
*/
// Order task = delayQueue.poll();
Order task = delayQueue.take();
DelayedQueue task = delayQueue.take();
delayQueue.peek();
if (task != null) {
System.out.format("订单:{%s}被取消, 放入时间{%s},取消时间:{%s}\n", task.getName(), task.getTimestamp(), LocalDateTime.now()
+1
View File
@@ -13,6 +13,7 @@
<module>concurrent</module>
<module>file-read</module>
<module>kafka</module>
<module>chain-of-responsibility</module>
</modules>
<packaging>pom</packaging>
<properties>