From b577e71956f7533d62f55c91e2d5df138447c0e4 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sat, 1 Feb 2025 18:17:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E5=86=99=E8=A7=82=E5=AF=9F?= =?UTF-8?q?=E8=80=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式-v2/image-20250201164040235.png | Bin 0 -> 27443 bytes .../设计模式-v2/image-20250201173433406.png | Bin 0 -> 48790 bytes .../设计模式-v2/image-20250201175728138.png | Bin 0 -> 23327 bytes README/设计模式-v2.md | 314 ++++++++++++++++++ README/设计模式.md | 20 +- .../cn/bunny/pattern3/{ => demo1}/Main.java | 12 +- .../{ => demo1}/observer/Observer.java | 2 +- .../{ => demo1}/observer/Observer1.java | 2 +- .../{ => demo1}/observer/Observer2.java | 2 +- .../{ => demo1}/observer/Observer3.java | 2 +- .../pattern3/{ => demo1}/subject/Subject.java | 4 +- .../subject/WeatherStationSubject.java | 4 +- .../cn/bunny/pattern3/demo2/ObserverDemo.java | 84 +++++ 13 files changed, 421 insertions(+), 25 deletions(-) create mode 100644 README/images/设计模式-v2/image-20250201164040235.png create mode 100644 README/images/设计模式-v2/image-20250201173433406.png create mode 100644 README/images/设计模式-v2/image-20250201175728138.png create mode 100644 README/设计模式-v2.md rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/Main.java (76%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/observer/Observer.java (86%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/observer/Observer1.java (90%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/observer/Observer2.java (90%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/observer/Observer3.java (90%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/subject/Subject.java (66%) rename pattern/src/main/java/cn/bunny/pattern3/{ => demo1}/subject/WeatherStationSubject.java (90%) create mode 100644 pattern/src/main/java/cn/bunny/pattern3/demo2/ObserverDemo.java diff --git a/README/images/设计模式-v2/image-20250201164040235.png b/README/images/设计模式-v2/image-20250201164040235.png new file mode 100644 index 0000000000000000000000000000000000000000..dd89a710852267222551608010004b28ec27e326 GIT binary patch literal 27443 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 BbtwP< literal 0 HcmV?d00001 diff --git a/README/images/设计模式-v2/image-20250201173433406.png b/README/images/设计模式-v2/image-20250201173433406.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb74942c9a5323d4cfaf72a1c3b9e64ea4bb60e GIT binary patch literal 48790 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%0D4_0^EVwY``Fvyb*_HwKwrBG9w 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 literal 0 HcmV?d00001 diff --git a/README/images/设计模式-v2/image-20250201175728138.png b/README/images/设计模式-v2/image-20250201175728138.png new file mode 100644 index 0000000000000000000000000000000000000000..f209eb14ad33248c7ff04d5e2c53cb960d811d91 GIT binary patch literal 23327 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 observerList = new ArrayList<>(); + + @Override + public void addObserver(Observer observer) { + observerList.add(observer); + } + + @Override + public void removeObserver(Observer observer) { + observerList.remove(observer); + } + + @Override + public void notifyObservers(String message) { + for (Observer observer : observerList) { + observer.update(message); + } + } + } +} +``` + +#### 运行结果: + +```java +SisterObserver 接受到消息:添加了妹妹 + +-----------------分割线----------------- + +SisterObserver 接受到消息:添加了女朋友 +GirlfriendObserver 接受到消息:添加了女朋友 + +-----------------分割线----------------- + +SisterObserver 接受到消息:需要和妹妹说点悄悄话,将女朋友移除了,这时女朋友听不见我们说话。。。 +``` + +--- + +## 装饰者模式 + +一共有四个角色。 + +- 抽象组件:一般是最原始、最基础的对象。 +- 具体组件:一般是最原始最基础的实现对象,可以有多个(只是数量不多),可以大致看下`InputStream`UML结构图。 +- 装饰角色:继承或者实现**抽象组件**这是最关键的地方。 +- 具体装饰角色:可以有多个实现或者继承**装饰角色**。 \ No newline at end of file diff --git a/README/设计模式.md b/README/设计模式.md index 67f21e9..a51864b 100644 --- a/README/设计模式.md +++ b/README/设计模式.md @@ -374,8 +374,6 @@ public class Client { - **工厂方法模式**:通过子类来决定产品的创建,适合产品种类较多时,且产品可能会变化。 - **抽象工厂模式**:提供多个相关的产品的创建接口,适合需要创建一系列相关产品的场景。 - - ## 观察者模式 观察者模式是一种行为设计模式,它允许一个对象(被观察者)在其状态发生变化时,自动通知所有依赖于它的对象(观察者),而不需要知道这些观察者的具体细节。其主要思想是实现“低耦合”,即对象之间的关系通过接口进行松散连接。为了避免使用过时的类,我们可以手动实现观察者模式。我们需要定义一个“观察者”接口和一个“被观察者”接口,并在被观察者中维护一个观察者的列表,通知观察者更新状态。 @@ -483,7 +481,7 @@ public interface Subject { #### 主体实现 ```java -import cn.bunny.pattern3.observer.Observer; +import cn.bunny.pattern3.demo1.observer.Observer; import java.util.ArrayList; import java.util.List; @@ -526,11 +524,11 @@ public class WeatherStationSubject implements Subject { ### 运行 ```java -import cn.bunny.pattern3.observer.Observer; -import cn.bunny.pattern3.observer.Observer1; -import cn.bunny.pattern3.observer.Observer2; -import cn.bunny.pattern3.observer.Observer3; -import cn.bunny.pattern3.subject.WeatherStationSubject; +import cn.bunny.pattern3.demo1.observer.Observer; +import cn.bunny.pattern3.demo1.observer.Observer1; +import cn.bunny.pattern3.demo1.observer.Observer2; +import cn.bunny.pattern3.demo1.observer.Observer3; +import cn.bunny.pattern3.demo1.subject.WeatherStationSubject; public class Main { public static void main(String[] args) { @@ -662,17 +660,17 @@ public class FilterCameraDecorator extends CameraDecorator { public class Main { public static void main(String[] args) { System.out.println("------------------执行简单的拍照-------------------"); - + TakePhotoCamera takePhotoCamera = new TakePhotoCamera(); takePhotoCamera.operation(); System.out.println("-------------------需要美颜功能------------------"); - + BeautyCameraDecorator beautyCameraDecorator = new BeautyCameraDecorator(takePhotoCamera); beautyCameraDecorator.operation(); System.out.println("-------------------需要美颜功能之后滤镜------------------"); - + FilterCameraDecorator filterCameraDecorator = new FilterCameraDecorator(beautyCameraDecorator); filterCameraDecorator.operation(); } diff --git a/pattern/src/main/java/cn/bunny/pattern3/Main.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/Main.java similarity index 76% rename from pattern/src/main/java/cn/bunny/pattern3/Main.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/Main.java index a76cf55..c079322 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/Main.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/Main.java @@ -1,11 +1,11 @@ -package cn.bunny.pattern3; +package cn.bunny.pattern3.demo1; -import cn.bunny.pattern3.observer.Observer; -import cn.bunny.pattern3.observer.Observer1; -import cn.bunny.pattern3.observer.Observer2; -import cn.bunny.pattern3.observer.Observer3; -import cn.bunny.pattern3.subject.WeatherStationSubject; +import cn.bunny.pattern3.demo1.observer.Observer; +import cn.bunny.pattern3.demo1.observer.Observer1; +import cn.bunny.pattern3.demo1.observer.Observer2; +import cn.bunny.pattern3.demo1.observer.Observer3; +import cn.bunny.pattern3.demo1.subject.WeatherStationSubject; public class Main { public static void main(String[] args) { diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer.java similarity index 86% rename from pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer.java index 3d6461b..1b92cfb 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer.java @@ -1,4 +1,4 @@ -package cn.bunny.pattern3.observer; +package cn.bunny.pattern3.demo1.observer; /** * 观察者接口 diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer1.java similarity index 90% rename from pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer1.java index 6fb825b..05168be 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer1.java @@ -1,4 +1,4 @@ -package cn.bunny.pattern3.observer; +package cn.bunny.pattern3.demo1.observer; public class Observer1 implements Observer { diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer2.java similarity index 90% rename from pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer2.java index d736c6e..08da1fa 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer2.java @@ -1,4 +1,4 @@ -package cn.bunny.pattern3.observer; +package cn.bunny.pattern3.demo1.observer; public class Observer2 implements Observer { diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer3.java similarity index 90% rename from pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer3.java index b984e8b..153dec7 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/observer/Observer3.java @@ -1,4 +1,4 @@ -package cn.bunny.pattern3.observer; +package cn.bunny.pattern3.demo1.observer; public class Observer3 implements Observer { diff --git a/pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/subject/Subject.java similarity index 66% rename from pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/subject/Subject.java index 5c3dff8..227d4f4 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/subject/Subject.java @@ -1,6 +1,6 @@ -package cn.bunny.pattern3.subject; +package cn.bunny.pattern3.demo1.subject; -import cn.bunny.pattern3.observer.Observer; +import cn.bunny.pattern3.demo1.observer.Observer; /** * 被观察者接口 diff --git a/pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java b/pattern/src/main/java/cn/bunny/pattern3/demo1/subject/WeatherStationSubject.java similarity index 90% rename from pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java rename to pattern/src/main/java/cn/bunny/pattern3/demo1/subject/WeatherStationSubject.java index 20d93a5..1dc6cd3 100644 --- a/pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java +++ b/pattern/src/main/java/cn/bunny/pattern3/demo1/subject/WeatherStationSubject.java @@ -1,7 +1,7 @@ -package cn.bunny.pattern3.subject; +package cn.bunny.pattern3.demo1.subject; -import cn.bunny.pattern3.observer.Observer; +import cn.bunny.pattern3.demo1.observer.Observer; import java.util.ArrayList; import java.util.List; diff --git a/pattern/src/main/java/cn/bunny/pattern3/demo2/ObserverDemo.java b/pattern/src/main/java/cn/bunny/pattern3/demo2/ObserverDemo.java new file mode 100644 index 0000000..fffbcbf --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/demo2/ObserverDemo.java @@ -0,0 +1,84 @@ +package cn.bunny.pattern3.demo2; + +import java.util.ArrayList; +import java.util.List; + +public class ObserverDemo { + public static void main(String[] args) { + // 定义的主题 + News news = new News(); + + // 观察者 + SisterObserver sisterObserver = new SisterObserver(); + GirlfriendObserver girlfriendObserver = new GirlfriendObserver(); + + // 添加观察者 + news.addObserver(sisterObserver); + news.notifyObservers("添加了妹妹"); + + System.out.println("\n-----------------分割线-----------------\n"); + + // 添加女朋友 + news.addObserver(girlfriendObserver); + news.notifyObservers("添加了女朋友"); + + System.out.println("\n-----------------分割线-----------------\n"); + news.removeObserver(girlfriendObserver); + news.notifyObservers("需要和妹妹说点悄悄话,将女朋友移除了,这时女朋友听不见我们说话。。。"); + } + + // 观察者接口 + @FunctionalInterface + interface Observer { + void update(String message); + } + + // 主题接口 + interface Subject { + void addObserver(Observer observer); + + void removeObserver(Observer observer); + + void notifyObservers(String message); + } + + // 妹妹观察者 + static class SisterObserver implements Observer { + @Override + public void update(String message) { + System.out.println("SisterObserver 接受到消息:" + message); + } + } + + // 女朋友观察者 + static class GirlfriendObserver implements Observer { + @Override + public void update(String message) { + System.out.println("GirlfriendObserver 接受到消息:" + message); + } + } + + // 主题类 + static class News implements Subject { + + private final List observerList = new ArrayList<>(); + + @Override + public void addObserver(Observer observer) { + observerList.add(observer); + } + + @Override + public void removeObserver(Observer observer) { + observerList.remove(observer); + } + + @Override + public void notifyObservers(String message) { + for (Observer observer : observerList) { + observer.update(message); + } + } + } +} +