test
This commit is contained in:
@@ -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");
|
||||
|
||||
}
|
||||
}
|
||||
+13
-5
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user