diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000000000000000000000000000000000..a55e7a179bde3e4e772c29c0c85e53354aa54618 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md index 5f88fbea55ee805559b0c3ecc591deabaf363975..0ed4638b7b8b5ec4039d5cfa50994ccd1e44fc59 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,6 @@ 越努力,越幸运!~~ -#### 安装教程 - -1. 只需要Clone即可完成 -2. xxxx -3. xxxx - #### 使用说明 ### 代理模式 *静态代理: @@ -161,8 +155,13 @@ ![img.png](img/img_observer_pattern_introduce.png) ## 6.1.2 观察者模式原理 ![img.png](img/img_observer_principal.png) - -#### 特技 +## 6.1.3 观察者模式的优缺点 +![img.png](img/img_observer_pattern_meritsAndDemerits.png) + +# 6.2 模板方法模式 + + +# 特技 1. 使用 Readme.md 来支持不同的语言, Readme\_en.md: 支持英文, Readme\_zh.md: 支持中文 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/Test.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/Test.java index 251419cf7c7434f987771740246c5c22a7ba7874..4fca82621963787949a0b0cf1e8c27f0f7334a02 100644 --- a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/Test.java +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/Test.java @@ -17,5 +17,11 @@ public class Test { LotteryResult result = lotteryService.lottery("123456765434"); System.out.print(result); + System.out.println("========================="); + + com.boyunv.observer.example03.LotteryServiceImpl ls = new com.boyunv.observer.example03.LotteryServiceImpl(); + LotteryResult msg = ls.lotteryAndMsg("123"); + System.out.println(msg); + } } diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventListener.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..7db984eb37e9f9319c62b1c7b018573384f9a135 --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventListener.java @@ -0,0 +1,15 @@ +package com.boyunv.observer.example03; +/* + *@description + * 事件监听器接口 + *@author boyunv + *@create 2023/8/12 15:37 + *@version 1.0 + */ + +import com.boyunv.observer.example02.LotteryResult; + +public interface EventListener { + + void doEvent(LotteryResult lotteryResult); +} diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventManager.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventManager.java new file mode 100644 index 0000000000000000000000000000000000000000..49d0efe9343e006e70bb35aedf7a015a8bf8e02b --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/EventManager.java @@ -0,0 +1,61 @@ +package com.boyunv.observer.example03; +/* + *@description + *事件处理类 + *@author boyunv + *@create 2023/8/12 15:52 + *@version 1.0 + */ + +import com.boyunv.observer.example02.LotteryResult; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class EventManager { + public enum EventType{ + MQ, + Message + } + //监听器的集合 + Map, List> listeners=new HashMap<>(); + + public EventManager(Enum... operations){ + for (Enum operation : operations) { + this.listeners.put(operation,new ArrayList<>()); + } + } + + /** + * 订阅 + * @param eventType 事件类型 + * @param listener 监听对象 + */ + public void subscribe(Enum eventType,EventListener listener){ + List users = listeners.get(eventType); + users.add(listener); + } + /** + * 取消订阅 + * @param eventType 事件类型 + * @param listener 监听对象 + */ + public void unsubscribe(Enum eventType,EventListener listener){ + List users = listeners.get(eventType); + users.remove(listener); + } + + /** + * 通知的方法 + * @param eventType + * @param result + */ + public void notify(Enum eventType, LotteryResult result){ + List users = listeners.get(eventType); + for (EventListener listener : users) { + listener.doEvent(result); + } + } +} diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryService.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryService.java new file mode 100644 index 0000000000000000000000000000000000000000..5aa591645e3dc6582796e77a71b7f8b088fc8660 --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryService.java @@ -0,0 +1,38 @@ +package com.boyunv.observer.example03; +/* + *@description + * + *@author boyunv + *@create 2023/8/12 15:14 + *@version 1.0 + */ + +import com.boyunv.observer.example02.LotteryResult; + +import java.util.PrimitiveIterator; + +public abstract class LotteryService { + private EventManager eventManager; + + public LotteryService() { + //设置事件的监听类型 + eventManager = new EventManager(EventManager.EventType.MQ,EventManager.EventType.Message); + //订阅 + eventManager.subscribe(EventManager.EventType.Message,new MessageEventListener()); + ///MQ + eventManager.subscribe(EventManager.EventType.MQ,new MQEventListener()); + + + } + + + public LotteryResult lotteryAndMsg(String uId){ + LotteryResult lottery = lottery(uId); + //发送通知 + eventManager.notify(EventManager.EventType.Message,lottery); + eventManager.notify(EventManager.EventType.MQ,lottery); + return lottery; + } + + public abstract LotteryResult lottery(String uId); +} diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryServiceImpl.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..9528411233b1a6792821425008819bb39e717c96 --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/LotteryServiceImpl.java @@ -0,0 +1,28 @@ +package com.boyunv.observer.example03; +/* + *@description + * + *@author boyunv + *@create 2023/8/12 15:20 + *@version 1.0 + */ + +import com.boyunv.observer.example02.DrawHouseService; +import com.boyunv.observer.example02.LotteryResult; + +import java.util.Date; + +public class LotteryServiceImpl extends LotteryService +{ + + //注入摇号服务 + private DrawHouseService houseService=new DrawHouseService(); + + + @Override + public LotteryResult lottery(String uId) { + //1.摇号 + String result = houseService.lots(uId); + return new LotteryResult(uId,result,new Date()); + } +} diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MQEventListener.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MQEventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..511aaf1b1701726890b18bd66e4d2e3c9cd66298 --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MQEventListener.java @@ -0,0 +1,17 @@ +package com.boyunv.observer.example03; +/* + *@description + *MQ 消息发送事件 + *@author boyunv + *@create 2023/8/12 15:47 + *@version 1.0 + */ + +import com.boyunv.observer.example02.LotteryResult; + +public class MQEventListener implements EventListener{ + @Override + public void doEvent(LotteryResult lotteryResult) { + System.out.println("记录用户的摇号结果(MQ),用户ID::"+lotteryResult.getUId()+",摇号结果:"+lotteryResult.getMsg()); + } +} diff --git a/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MessageEventListener.java b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MessageEventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..e74dfed96828e35072b87b3acb6990e259dd9307 --- /dev/null +++ b/byv-observer-patttern-12/src/main/java/com/boyunv/observer/example03/MessageEventListener.java @@ -0,0 +1,19 @@ +package com.boyunv.observer.example03; +/* + *@description + *短信发送事件监听类 + *@author boyunv + *@create 2023/8/12 15:39 + *@version 1.0 + */ + +import com.boyunv.observer.example02.LotteryResult; + +import javax.xml.transform.Result; + +public class MessageEventListener implements EventListener{ + @Override + public void doEvent(LotteryResult lotteryResult) { + System.out.println("发送短信通知,用户ID:"+ lotteryResult.getUId()+",n您的摇号结果"+lotteryResult.getMsg()); + } +} diff --git a/img/img_observer_pattern_meritsAndDemerits.png b/img/img_observer_pattern_meritsAndDemerits.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4389033da69915389a2aa352df3bb1a2359fd3 Binary files /dev/null and b/img/img_observer_pattern_meritsAndDemerits.png differ