From 45d4c2604f919f722364a8b3bde98aea8aa3651d Mon Sep 17 00:00:00 2001 From: wyl <959814898@qq.com> Date: Sat, 14 May 2022 21:34:41 +0800 Subject: [PATCH] test --- chain-of-responsibility/pom.xml | 19 +++++++++++++ .../src/main/java/com/wyl/chain/Handler.java | 20 ++++++++++++++ .../main/java/com/wyl/chain/HandlerChain.java | 23 ++++++++++++++++ .../com/wyl/chain/handler/FirstHandler.java | 27 +++++++++++++++++++ .../com/wyl/chain/handler/SecondHandler.java | 27 +++++++++++++++++++ .../test/java/com/wyl/chain/ChainTest.java | 17 ++++++++++++ .../queue/{Order.java => DelayedQueue.java} | 18 +++++++++---- .../java/concurrent/queue/DelayQueueTest.java | 19 ++++++++----- pom.xml | 1 + 9 files changed, 160 insertions(+), 11 deletions(-) create mode 100644 chain-of-responsibility/pom.xml create mode 100644 chain-of-responsibility/src/main/java/com/wyl/chain/Handler.java create mode 100644 chain-of-responsibility/src/main/java/com/wyl/chain/HandlerChain.java create mode 100644 chain-of-responsibility/src/main/java/com/wyl/chain/handler/FirstHandler.java create mode 100644 chain-of-responsibility/src/main/java/com/wyl/chain/handler/SecondHandler.java create mode 100644 chain-of-responsibility/src/test/java/com/wyl/chain/ChainTest.java rename concurrent/src/main/java/concurrent/queue/{Order.java => DelayedQueue.java} (62%) diff --git a/chain-of-responsibility/pom.xml b/chain-of-responsibility/pom.xml new file mode 100644 index 0000000..d485540 --- /dev/null +++ b/chain-of-responsibility/pom.xml @@ -0,0 +1,19 @@ + + + + JavaBasiceDemo + com.wyl.example + 1.0-SNAPSHOT + + 4.0.0 + + chain-of-responsibility + + + 8 + 8 + + + \ No newline at end of file diff --git a/chain-of-responsibility/src/main/java/com/wyl/chain/Handler.java b/chain-of-responsibility/src/main/java/com/wyl/chain/Handler.java new file mode 100644 index 0000000..4ba136c --- /dev/null +++ b/chain-of-responsibility/src/main/java/com/wyl/chain/Handler.java @@ -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); +} diff --git a/chain-of-responsibility/src/main/java/com/wyl/chain/HandlerChain.java b/chain-of-responsibility/src/main/java/com/wyl/chain/HandlerChain.java new file mode 100644 index 0000000..e4eba53 --- /dev/null +++ b/chain-of-responsibility/src/main/java/com/wyl/chain/HandlerChain.java @@ -0,0 +1,23 @@ +package com.wyl.chain; + +import java.util.LinkedList; +import java.util.List; + +public class HandlerChain { + private List 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; + } + + } + } +} diff --git a/chain-of-responsibility/src/main/java/com/wyl/chain/handler/FirstHandler.java b/chain-of-responsibility/src/main/java/com/wyl/chain/handler/FirstHandler.java new file mode 100644 index 0000000..8eae952 --- /dev/null +++ b/chain-of-responsibility/src/main/java/com/wyl/chain/handler/FirstHandler.java @@ -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; + } +} + diff --git a/chain-of-responsibility/src/main/java/com/wyl/chain/handler/SecondHandler.java b/chain-of-responsibility/src/main/java/com/wyl/chain/handler/SecondHandler.java new file mode 100644 index 0000000..a3d88d3 --- /dev/null +++ b/chain-of-responsibility/src/main/java/com/wyl/chain/handler/SecondHandler.java @@ -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; + } +} + diff --git a/chain-of-responsibility/src/test/java/com/wyl/chain/ChainTest.java b/chain-of-responsibility/src/test/java/com/wyl/chain/ChainTest.java new file mode 100644 index 0000000..d6f3bc1 --- /dev/null +++ b/chain-of-responsibility/src/test/java/com/wyl/chain/ChainTest.java @@ -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"); + + } +} diff --git a/concurrent/src/main/java/concurrent/queue/Order.java b/concurrent/src/main/java/concurrent/queue/DelayedQueue.java similarity index 62% rename from concurrent/src/main/java/concurrent/queue/Order.java rename to concurrent/src/main/java/concurrent/queue/DelayedQueue.java index 4e6dd76..994e21f 100644 --- a/concurrent/src/main/java/concurrent/queue/Order.java +++ b/concurrent/src/main/java/concurrent/queue/DelayedQueue.java @@ -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; diff --git a/concurrent/src/test/java/concurrent/queue/DelayQueueTest.java b/concurrent/src/test/java/concurrent/queue/DelayQueueTest.java index d7be6e7..e13080b 100644 --- a/concurrent/src/test/java/concurrent/queue/DelayQueueTest.java +++ b/concurrent/src/test/java/concurrent/queue/DelayQueueTest.java @@ -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 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 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() diff --git a/pom.xml b/pom.xml index a691a25..205319e 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,7 @@ concurrent file-read kafka + chain-of-responsibility pom