From 4b7d878e4e8f377924e0b2a445c2f7b6f6f50ec6 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Fri, 31 Jan 2025 22:54:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=82=E5=AF=9F=E8=80=85=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式/image-20250131222844877.png | Bin 0 -> 18796 bytes .../设计模式/image-20250131222858501.png | Bin 0 -> 24309 bytes .../设计模式/image-20250131223259043.png | Bin 0 -> 21920 bytes .../设计模式/image-20250131223315954.png | Bin 0 -> 33633 bytes .../设计模式/image-20250131223737965.png | Bin 0 -> 15958 bytes .../设计模式/image-20250131224206984.png | Bin 0 -> 10052 bytes README/设计模式.md | 424 ++++++++++++++++-- .../src/main/java/cn/bunny/pattern2/Main.java | 2 + .../cn/bunny/pattern2/duck/AbstractDuck.java | 1 - .../src/main/java/cn/bunny/pattern3/Main.java | 33 ++ .../cn/bunny/pattern3/observer/Observer.java | 16 + .../cn/bunny/pattern3/observer/Observer1.java | 17 + .../cn/bunny/pattern3/observer/Observer2.java | 17 + .../cn/bunny/pattern3/observer/Observer3.java | 16 + .../cn/bunny/pattern3/subject/Subject.java | 14 + .../subject/WeatherStationSubject.java | 41 ++ 16 files changed, 555 insertions(+), 26 deletions(-) create mode 100644 README/images/设计模式/image-20250131222844877.png create mode 100644 README/images/设计模式/image-20250131222858501.png create mode 100644 README/images/设计模式/image-20250131223259043.png create mode 100644 README/images/设计模式/image-20250131223315954.png create mode 100644 README/images/设计模式/image-20250131223737965.png create mode 100644 README/images/设计模式/image-20250131224206984.png create mode 100644 pattern/src/main/java/cn/bunny/pattern3/Main.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java create mode 100644 pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java diff --git a/README/images/设计模式/image-20250131222844877.png b/README/images/设计模式/image-20250131222844877.png new file mode 100644 index 0000000000000000000000000000000000000000..82ffdf6e4750008d0fdc5e0d0bb486c6f78e97ef GIT binary patch literal 18796 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 Nnoo2d*Q?q_{TI^4>#hI* literal 0 HcmV?d00001 diff --git a/README/images/设计模式/image-20250131223315954.png b/README/images/设计模式/image-20250131223315954.png new file mode 100644 index 0000000000000000000000000000000000000000..7794095cb769ba34f5ff06566a0691f199d0897d GIT binary patch literal 33633 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 TX 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 CHK`c@ literal 0 HcmV?d00001 diff --git a/README/images/设计模式/image-20250131223737965.png b/README/images/设计模式/image-20250131223737965.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3ebd1a39d9c017117feab0380f966922563b10 GIT binary patch literal 15958 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 Zhy0t=$hYvkv)yq3^`|gs*^?LH{|hYW)3*Qs literal 0 HcmV?d00001 diff --git a/README/设计模式.md b/README/设计模式.md index 3b061ef..a599277 100644 --- a/README/设计模式.md +++ b/README/设计模式.md @@ -55,21 +55,23 @@ public class Singleton { #### 总结 -懒汉模式有时为了延迟初始化而牺牲了性能,特别是在多线程环境下。为了保证线程安全,可以采用双重检查锁定(DCL)或静态内部类的方式,而**静态内部类方式是最推荐的方式**,它避免了同步开销,同时也能确保线程安全。 +懒汉模式有时为了延迟初始化而牺牲了性能,特别是在多线程环境下。为了保证线程安全,可以采用双重检查锁定(DCL)或静态内部类的方式,而**静态内部类方式是最推荐的方式** +,它避免了同步开销,同时也能确保线程安全。 - **优点**: - 1. 延迟加载,节省资源。 - 2. 内存优化,只有在需要时才实例化。 - 3. 减少不必要的初始化开销。 + 1. 延迟加载,节省资源。 + 2. 内存优化,只有在需要时才实例化。 + 3. 减少不必要的初始化开销。 - **缺点**: - 1. 传统懒汉模式线程不安全(多个线程可能会创建多个实例)。 - 2. 使用同步机制会有性能开销,特别是在多线程环境下。 - 3. 代码复杂性较高,容易引入错误。 - 4. 不适合高并发场景,特别是频繁访问时会影响性能。 + 1. 传统懒汉模式线程不安全(多个线程可能会创建多个实例)。 + 2. 使用同步机制会有性能开销,特别是在多线程环境下。 + 3. 代码复杂性较高,容易引入错误。 + 4. 不适合高并发场景,特别是频繁访问时会影响性能。 ### 饿汉模式 -**饿汉模式**(Eager Initialization)是单例模式的一种实现方式,在该方式中,单例实例在类加载时就已经创建完成,而不是在首次使用时才创建。换句话说,**饿汉模式**的单例实例在类被加载时就会立即初始化,确保了单例模式的唯一性。 +**饿汉模式**(Eager Initialization)是单例模式的一种实现方式,在该方式中,单例实例在类加载时就已经创建完成,而不是在首次使用时才创建。换句话说,**饿汉模式** +的单例实例在类被加载时就会立即初始化,确保了单例模式的唯一性。 ```java public class Singleton { @@ -103,7 +105,8 @@ public class Singleton { ### 枚举类型实现 -**枚举类型实现单例模式**(Enum Singleton)是实现单例模式的另一种方式,优点是更加简洁、可靠,并且避免了许多常见的单例实现方式(如懒汉模式和饿汉模式)可能出现的问题。使用枚举类型的单例实现方式自 **Java 5** 引入以来,已经成为了最推荐的单例模式实现方式之一。 +**枚举类型实现单例模式**(Enum Singleton)是实现单例模式的另一种方式,优点是更加简洁、可靠,并且避免了许多常见的单例实现方式(如懒汉模式和饿汉模式)可能出现的问题。使用枚举类型的单例实现方式自 +**Java 5** 引入以来,已经成为了最推荐的单例模式实现方式之一。 **当你不需要懒加载或延迟初始化时,使用枚举实现单例模式是最理想的选择。** @@ -147,11 +150,11 @@ public class Main { 简单工厂模式是工厂模式的一种简单形式,**它并不属于设计模式中的结构**,它是通过一个工厂类来决定创建哪一个产品类的实例。 - 特点 - - 由工厂类来决定实例化哪个产品类,不暴露具体的产品创建过程。 - - 客户端不需要知道产品类的具体信息,减少了与产品类的耦合。 + - 由工厂类来决定实例化哪个产品类,不暴露具体的产品创建过程。 + - 客户端不需要知道产品类的具体信息,减少了与产品类的耦合。 - 优缺点 - - 优点:客户端不需要关心对象的创建细节,降低了代码的耦合度。 - - 缺点:工厂类需要维护一个 `if` 或 `switch` 来判断创建哪种产品,如果产品种类增加,工厂类会变得非常庞大且难以维护。 + - 优点:客户端不需要关心对象的创建细节,降低了代码的耦合度。 + - 缺点:工厂类需要维护一个 `if` 或 `switch` 来判断创建哪种产品,如果产品种类增加,工厂类会变得非常庞大且难以维护。 **示例**: @@ -202,11 +205,11 @@ public class Client { 工厂方法模式是工厂模式的核心。它通过定义一个接口来创建对象,由子类来决定实例化哪一个类。工厂方法模式将简单工厂中的创建产品的逻辑分散到了各个具体的工厂类中。 - 特点 - - 定义一个创建对象的接口,但让子类来决定具体实例化哪一个产品。 - - 通过继承和多态来解决简单工厂的缺点,避免了在一个类中维护大量的 `if` 或 `switch` 语句。 + - 定义一个创建对象的接口,但让子类来决定具体实例化哪一个产品。 + - 通过继承和多态来解决简单工厂的缺点,避免了在一个类中维护大量的 `if` 或 `switch` 语句。 - 优缺点 - - 优点:符合开闭原则,增加新产品时只需要添加新的工厂类,不需要修改现有代码。 - - 缺点:增加了类的数量,系统更为复杂。 + - 优点:符合开闭原则,增加新产品时只需要添加新的工厂类,不需要修改现有代码。 + - 缺点:增加了类的数量,系统更为复杂。 **示例**: @@ -252,7 +255,7 @@ public class Client { Creator creatorA = new ConcreteCreatorA(); Product productA = creatorA.factoryMethod(); productA.use(); - + Creator creatorB = new ConcreteCreatorB(); Product productB = creatorB.factoryMethod(); productB.use(); @@ -265,11 +268,11 @@ public class Client { 抽象工厂模式是工厂模式的进一步扩展,它提供了一个接口,用于创建一组相关或相互依赖的对象,而无需指定具体的类。与工厂方法模式不同,抽象工厂模式更侧重于一组产品的创建,而不是单个产品的创建。 - 特点 - - 提供一个接口,用来创建相关或依赖的多个产品。 - - 客户端通过抽象工厂来获取一系列的产品对象,而无需知道具体的实现。 + - 提供一个接口,用来创建相关或依赖的多个产品。 + - 客户端通过抽象工厂来获取一系列的产品对象,而无需知道具体的实现。 - 优缺点 - - 优点:可以方便地更换产品系列(产品的族),符合开闭原则。 - - 缺点:增加了系统的复杂性,如果新增产品族或产品种类时需要修改现有的代码。 + - 优点:可以方便地更换产品系列(产品的族),符合开闭原则。 + - 缺点:增加了系统的复杂性,如果新增产品族或产品种类时需要修改现有的代码。 **示例**: @@ -312,6 +315,7 @@ class ConcreteProductB2 implements ProductB { interface AbstractFactory { ProductA createProductA(); + ProductB createProductB(); } @@ -346,7 +350,7 @@ public class Client { ProductB productB1 = factory1.createProductB(); productA1.useA(); productB1.useB(); - + AbstractFactory factory2 = new ConcreteFactory2(); ProductA productA2 = factory2.createProductA(); ProductB productB2 = factory2.createProductB(); @@ -360,4 +364,374 @@ public class Client { - **简单工厂模式**:由工厂类根据不同的条件决定创建不同的对象,适合产品种类少且变化不大时。 - **工厂方法模式**:通过子类来决定产品的创建,适合产品种类较多时,且产品可能会变化。 -- **抽象工厂模式**:提供多个相关的产品的创建接口,适合需要创建一系列相关产品的场景。 \ No newline at end of file +- **抽象工厂模式**:提供多个相关的产品的创建接口,适合需要创建一系列相关产品的场景。 + +## 策略模式 + +![image-20250131223259043](./images/设计模式/image-20250131223259043.png) + +![image-20250131223315954](./images/设计模式/image-20250131223315954.png) + +我们通过策略模式来实现鸭子的飞行和叫声行为,使得它们可以在运行时灵活替换。 + +### 飞行行为 + +#### 飞行接口 + +```java +public interface FlyBehavior { + /** + * 飞的样子 + */ + void fly(); +} +``` + +#### 飞行实现 + +```java +public class FlyNoWay implements FlyBehavior { + /** + * 飞的样子 + */ + @Override + public void fly() { + System.out.println("不能飞。。。"); + } +} + +public class FlyWithWings implements FlyBehavior { + /** + * 飞的样子 + */ + @Override + public void fly() { + System.out.println("可以飞。。。"); + } +} + +``` + +### 叫的行为 + +#### 叫的接口 + +```java +public interface QuackBehavior { + /** + * 怎么叫的 + */ + void quack(); +} +``` + +#### 叫的实现 + +```java +public class MuteQuack implements QuackBehavior { + /** + * 怎么叫的 + */ + @Override + public void quack() { + System.out.println("不会叫..."); + } +} + +public class Quack implements QuackBehavior { + /** + * 怎么叫的 + */ + @Override + public void quack() { + System.out.println("鸭子叫。。。"); + } +} +``` + +### 鸭子 + +```java +@Setter +public abstract class AbstractDuck { + // 设置新的叫声行为 + QuackBehavior quackBehavior; + // 设置新的飞行行为 + FlyBehavior flyBehavior; + + public AbstractDuck() { + } + + /** + * 展示什么类型的鸭子 + */ + public abstract void display(); + + public void performFly() { + flyBehavior.fly(); + } + + public void performQuack() { + quackBehavior.quack(); + } + + public void swim() { + System.out.println("鸭子游泳"); + } +} +``` + +#### 鸭子继承 + +```java +public class ModelDuck extends AbstractDuck { + + private final String modelDuck = "橡皮🦆"; + + public ModelDuck() { + super.setFlyBehavior(new FlyNoWay()); + super.quackBehavior = new MuteQuack(); + } + + /** + * 展示什么类型的鸭子 + */ + @Override + public void display() { + System.out.println(modelDuck + "..."); + } + + /** + * + */ + @Override + public void swim() { + System.out.println(modelDuck + "不会游泳。。。"); + } +} + +public class WoodDuck extends AbstractDuck { + + private final String modelDuck = "木头🦆"; + + public WoodDuck() { + super.flyBehavior = new FlyNoWay(); + super.quackBehavior = new MuteQuack(); + } + + /** + * 展示什么类型的鸭子 + */ + @Override + public void display() { + System.out.println(modelDuck + "..."); + } +} +``` + +### 运行 + +```java +public class Main { + public static void main(String[] args) { + ModelDuck modelDuck = new ModelDuck(); + modelDuck.display(); + modelDuck.performFly(); + modelDuck.performQuack(); + modelDuck.swim(); + + System.out.println("--------------------------------"); + + AbstractDuck woodDuck = new WoodDuck(); + woodDuck.display(); + woodDuck.performFly(); + woodDuck.performQuack(); + woodDuck.swim(); + } +} +``` + +![image-20250131224206984](./images/设计模式/image-20250131224206984.png) + +## 观察者模式 + +观察者模式是一种行为设计模式,它允许一个对象(被观察者)在其状态发生变化时,自动通知所有依赖于它的对象(观察者),而不需要知道这些观察者的具体细节。其主要思想是实现“低耦合”,即对象之间的关系通过接口进行松散连接。 + +![image-20250131222844877](./images/设计模式/image-20250131222844877.png) + +![image-20250131222858501](./images/设计模式/image-20250131222858501.png) + +为了避免使用过时的类,我们可以手动实现观察者模式。我们需要定义一个“观察者”接口和一个“被观察者”接口,并在被观察者中维护一个观察者的列表,通知观察者更新状态。 + +### 观察者 + +#### 观察者接口 + +```java +/** + * 观察者接口 + */ +public interface Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + void update(float temperature, float humidity, float pressure); +} +``` + +#### 观察者的实现 + +```java +public class Observer1 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer1 显示数据:temperature = " + temperature + ";humidity = " + humidity); + } +} + +public class Observer2 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer2 显示数据:temperature = " + temperature + ";humidity = " + humidity); + + } +} + +public class Observer3 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer3 显示数据:temperature = " + temperature + ";humidity = " + humidity); + } +} +``` + +### 主题 + +#### 主体接口 + +```java +/** + * 被观察者接口 + */ +public interface Subject { + void registerObserver(Observer observer); + + void removeObserver(Observer observer); + + void notifyObservers(); +} +``` + +#### 主体实现 + +```java +import cn.bunny.pattern3.observer.Observer; + +import java.util.ArrayList; +import java.util.List; + +/** + * 被观察者类 + */ +public class WeatherStationSubject implements Subject { + private final List observers = new ArrayList<>(); + private float temperature; + private float humidity; + private float pressure; + + @Override + public void registerObserver(Observer observer) { + observers.add(observer); + } + + @Override + public void removeObserver(Observer observer) { + observers.remove(observer); + } + + @Override + public void notifyObservers() { + for (Observer observer : observers) { + observer.update(temperature, humidity, pressure); + } + } + + public void setTemperature(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + notifyObservers(); + } +} +``` + +### 运行 + +```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; + +public class Main { + public static void main(String[] args) { + WeatherStationSubject weatherStationSubject = new WeatherStationSubject(); + Observer observer1 = new Observer1(); + Observer observer2 = new Observer2(); + Observer observer3 = new Observer3(); + + // 注册观察者 + weatherStationSubject.registerObserver(observer1); + weatherStationSubject.registerObserver(observer2); + weatherStationSubject.registerObserver(observer3); + + // 更新天气温度,观察者会收到通知 + weatherStationSubject.setTemperature(25.0f, 25.0f, 25.0f); + weatherStationSubject.setTemperature(30.0f, 30.0f, 30.0f); + + // 移出观察者1 + weatherStationSubject.removeObserver(observer1); + + // 更新天气温度,观察者会收到通知 + System.out.println("--------------------------"); + weatherStationSubject.setTemperature(44.0f, 44.0f, 44.0f); + } +} +``` + +![image-20250131223737965](./images/设计模式/image-20250131223737965.png) + +## 装饰者模式 + + + diff --git a/pattern/src/main/java/cn/bunny/pattern2/Main.java b/pattern/src/main/java/cn/bunny/pattern2/Main.java index 21b3c1c..866a5aa 100644 --- a/pattern/src/main/java/cn/bunny/pattern2/Main.java +++ b/pattern/src/main/java/cn/bunny/pattern2/Main.java @@ -12,6 +12,8 @@ public class Main { modelDuck.performQuack(); modelDuck.swim(); + System.out.println("--------------------------------"); + AbstractDuck woodDuck = new WoodDuck(); woodDuck.display(); woodDuck.performFly(); diff --git a/pattern/src/main/java/cn/bunny/pattern2/duck/AbstractDuck.java b/pattern/src/main/java/cn/bunny/pattern2/duck/AbstractDuck.java index 13c6f4c..aed2310 100644 --- a/pattern/src/main/java/cn/bunny/pattern2/duck/AbstractDuck.java +++ b/pattern/src/main/java/cn/bunny/pattern2/duck/AbstractDuck.java @@ -30,5 +30,4 @@ public abstract class AbstractDuck { public void swim() { System.out.println("鸭子游泳"); } - } diff --git a/pattern/src/main/java/cn/bunny/pattern3/Main.java b/pattern/src/main/java/cn/bunny/pattern3/Main.java new file mode 100644 index 0000000..a76cf55 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/Main.java @@ -0,0 +1,33 @@ +package cn.bunny.pattern3; + + +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; + +public class Main { + public static void main(String[] args) { + WeatherStationSubject weatherStationSubject = new WeatherStationSubject(); + Observer observer1 = new Observer1(); + Observer observer2 = new Observer2(); + Observer observer3 = new Observer3(); + + // 注册观察者 + weatherStationSubject.registerObserver(observer1); + weatherStationSubject.registerObserver(observer2); + weatherStationSubject.registerObserver(observer3); + + // 更新天气温度,观察者会收到通知 + weatherStationSubject.setTemperature(25.0f, 25.0f, 25.0f); + weatherStationSubject.setTemperature(30.0f, 30.0f, 30.0f); + + // 移出观察者1 + weatherStationSubject.removeObserver(observer1); + + // 更新天气温度,观察者会收到通知 + System.out.println("--------------------------"); + weatherStationSubject.setTemperature(44.0f, 44.0f, 44.0f); + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java new file mode 100644 index 0000000..3d6461b --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer.java @@ -0,0 +1,16 @@ +package cn.bunny.pattern3.observer; + +/** + * 观察者接口 + */ +public interface Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + void update(float temperature, float humidity, float pressure); +} diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java new file mode 100644 index 0000000..6fb825b --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer1.java @@ -0,0 +1,17 @@ +package cn.bunny.pattern3.observer; + +public class Observer1 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer1 显示数据:temperature = " + temperature + ";humidity = " + humidity); + } +} + diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java new file mode 100644 index 0000000..d736c6e --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer2.java @@ -0,0 +1,17 @@ +package cn.bunny.pattern3.observer; + +public class Observer2 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer2 显示数据:temperature = " + temperature + ";humidity = " + humidity); + + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java new file mode 100644 index 0000000..b984e8b --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/observer/Observer3.java @@ -0,0 +1,16 @@ +package cn.bunny.pattern3.observer; + +public class Observer3 implements Observer { + + /** + * 更新数据 + * + * @param temperature 温度 + * @param humidity 湿度 + * @param pressure 气压 + */ + @Override + public void update(float temperature, float humidity, float pressure) { + System.out.println("Observer3 显示数据:temperature = " + temperature + ";humidity = " + humidity); + } +} diff --git a/pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java b/pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java new file mode 100644 index 0000000..5c3dff8 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/subject/Subject.java @@ -0,0 +1,14 @@ +package cn.bunny.pattern3.subject; + +import cn.bunny.pattern3.observer.Observer; + +/** + * 被观察者接口 + */ +public interface Subject { + void registerObserver(Observer observer); + + void removeObserver(Observer observer); + + void notifyObservers(); +} \ No newline at end of file diff --git a/pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java b/pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java new file mode 100644 index 0000000..20d93a5 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern3/subject/WeatherStationSubject.java @@ -0,0 +1,41 @@ +package cn.bunny.pattern3.subject; + + +import cn.bunny.pattern3.observer.Observer; + +import java.util.ArrayList; +import java.util.List; + +/** + * 被观察者类 + */ +public class WeatherStationSubject implements Subject { + private final List observers = new ArrayList<>(); + private float temperature; + private float humidity; + private float pressure; + + @Override + public void registerObserver(Observer observer) { + observers.add(observer); + } + + @Override + public void removeObserver(Observer observer) { + observers.remove(observer); + } + + @Override + public void notifyObservers() { + for (Observer observer : observers) { + observer.update(temperature, humidity, pressure); + } + } + + public void setTemperature(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + notifyObservers(); + } +} \ No newline at end of file