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 @@

## 6.1.2 观察者模式原理

-
-#### 特技
+## 6.1.3 观察者模式的优缺点
+
+
+# 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