diff --git a/src/main/java/com/msb/observer/v1/Observer01.java b/src/main/java/com/msb/observer/v1/Observer01.java new file mode 100644 index 0000000..1c01420 --- /dev/null +++ b/src/main/java/com/msb/observer/v1/Observer01.java @@ -0,0 +1,22 @@ +package com.msb.observer.v1;/** + * @Author bingor + * @Date 2022/10/13 19:05 + * @Description: com.msb.observer + * @Version: 1.0 + */ + +/** + *@ClassName Observer01 + *@Description 面向过程的方式 + *@Author bingor + *@Date 2022/10/13 19:05 + *@Version 3.0 + */ +public class Observer01 { + public static void main(String[] args) { + boolean cry = false; + while ( ! cry) { + System.out.println("继续观察……"); + } + } +} diff --git a/src/main/java/com/msb/observer/v2/Child.java b/src/main/java/com/msb/observer/v2/Child.java new file mode 100644 index 0000000..dad0967 --- /dev/null +++ b/src/main/java/com/msb/observer/v2/Child.java @@ -0,0 +1,26 @@ +package com.msb.observer.v2;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v2 + * @Version: 1.0 + */ + +/** + *@ClassName Child + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Child { + private boolean cry = false; + + public boolean isCry() { + return cry; + } + + public void wakeUp() { + this.cry = true; + System.out.println("孩子醒了……"); + } +} diff --git a/src/main/java/com/msb/observer/v2/Observer02.java b/src/main/java/com/msb/observer/v2/Observer02.java new file mode 100644 index 0000000..3f064fa --- /dev/null +++ b/src/main/java/com/msb/observer/v2/Observer02.java @@ -0,0 +1,29 @@ +package com.msb.observer.v2;/** + * @Author bingor + * @Date 2022/10/13 19:09 + * @Description: com.msb.observer + * @Version: 1.0 + */ + +/** + *@ClassName Observer02 + *@Description 披着面向对象的外衣面向过程 + *@Author bingor + *@Date 2022/10/13 19:09 + *@Version 3.0 + */ +public class Observer02 { + + public static void main(String[] args) { + Child child = new Child(); + while ( ! child.isCry()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("孩子还没有醒,继续观察……"); + } + } + +} diff --git a/src/main/java/com/msb/observer/v3/Child.java b/src/main/java/com/msb/observer/v3/Child.java new file mode 100644 index 0000000..e843e15 --- /dev/null +++ b/src/main/java/com/msb/observer/v3/Child.java @@ -0,0 +1,28 @@ +package com.msb.observer.v3;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v2 + * @Version: 1.0 + */ + +/** + *@ClassName Child + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Child { + + private boolean cry = false; + private Dad dad = new Dad(); + + public boolean isCry() { + return cry; + } + + public void wakeUp() { + this.cry = true; + dad.feed(); + } +} diff --git a/src/main/java/com/msb/observer/v3/Dad.java b/src/main/java/com/msb/observer/v3/Dad.java new file mode 100644 index 0000000..85e304e --- /dev/null +++ b/src/main/java/com/msb/observer/v3/Dad.java @@ -0,0 +1,19 @@ +package com.msb.observer.v3;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Dad { + public void feed() { + System.out.println("孩子醒了,爸爸给孩子喂奶……"); + } +} diff --git a/src/main/java/com/msb/observer/v3/Observer03.java b/src/main/java/com/msb/observer/v3/Observer03.java new file mode 100644 index 0000000..bf0bfa2 --- /dev/null +++ b/src/main/java/com/msb/observer/v3/Observer03.java @@ -0,0 +1,21 @@ +package com.msb.observer.v3;/** + * @Author bingor + * @Date 2022/10/13 19:15 + * @Description: com.msb.observer + * @Version: 1.0 + */ + +/** + *@ClassName Observer03 + *@Description 添加一个观察者 + *@Author bingor + *@Date 2022/10/13 19:15 + *@Version 3.0 + */ +public class Observer03 { + public static void main(String[] args) { + Child child = new Child(); + child.wakeUp(); + } +} + diff --git a/src/main/java/com/msb/observer/v4/Child.java b/src/main/java/com/msb/observer/v4/Child.java new file mode 100644 index 0000000..4ac8cbc --- /dev/null +++ b/src/main/java/com/msb/observer/v4/Child.java @@ -0,0 +1,34 @@ +package com.msb.observer.v4;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v2 + * @Version: 1.0 + */ + +import com.msb.observer.v3.Dad; + +/** + *@ClassName Child + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Child { + + private boolean cry = false; + private com.msb.observer.v3.Dad dad = new Dad(); + private Mum mum = new Mum(); + private Dog dog = new Dog(); + + public boolean isCry() { + return cry; + } + + public void wakeUp() { + this.cry = true; + dad.feed(); + mum.hug(); + dog.wang(); + } +} diff --git a/src/main/java/com/msb/observer/v4/Dad.java b/src/main/java/com/msb/observer/v4/Dad.java new file mode 100644 index 0000000..eb9cea1 --- /dev/null +++ b/src/main/java/com/msb/observer/v4/Dad.java @@ -0,0 +1,19 @@ +package com.msb.observer.v4;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Dad { + public void feed() { + System.out.println("孩子醒了,爸爸给孩子喂奶……"); + } +} diff --git a/src/main/java/com/msb/observer/v4/Dog.java b/src/main/java/com/msb/observer/v4/Dog.java new file mode 100644 index 0000000..40f3ebb --- /dev/null +++ b/src/main/java/com/msb/observer/v4/Dog.java @@ -0,0 +1,19 @@ +package com.msb.observer.v4;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Dog { + public void wang() { + System.out.println("孩子醒了,狗叫……"); + } +} diff --git a/src/main/java/com/msb/observer/v4/Mum.java b/src/main/java/com/msb/observer/v4/Mum.java new file mode 100644 index 0000000..d752e13 --- /dev/null +++ b/src/main/java/com/msb/observer/v4/Mum.java @@ -0,0 +1,19 @@ +package com.msb.observer.v4;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Mum { + public void hug() { + System.out.println("孩子醒了,妈妈宝宝孩子……"); + } +} diff --git a/src/main/java/com/msb/observer/v4/Observer04.java b/src/main/java/com/msb/observer/v4/Observer04.java new file mode 100644 index 0000000..2bcc9aa --- /dev/null +++ b/src/main/java/com/msb/observer/v4/Observer04.java @@ -0,0 +1,20 @@ +package com.msb.observer.v4;/** + * @Author bingor + * @Date 2022/10/13 19:28 + * @Description: com.msb.observer.v4 + * @Version: 1.0 + */ + +/** + *@ClassName Observer04 + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:28 + *@Version 3.0 + */ +public class Observer04 { + public static void main(String[] args) { + Child child = new Child(); + child.wakeUp(); + } +} diff --git a/src/main/java/com/msb/observer/v5/Child.java b/src/main/java/com/msb/observer/v5/Child.java new file mode 100644 index 0000000..f694669 --- /dev/null +++ b/src/main/java/com/msb/observer/v5/Child.java @@ -0,0 +1,41 @@ +package com.msb.observer.v5;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v2 + * @Version: 1.0 + */ + +import com.msb.chain.ColliderChain; +import com.msb.observer.v4.Dog; + +import java.util.ArrayList; +import java.util.List; + +/** + *@ClassName Child + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Child { + + private boolean cry = false; + private List observers = new ArrayList<>(); + + { + observers.add(new Dad()); + observers.add(new Mum()); + } + + public boolean isCry() { + return cry; + } + + public void wakeUp() { + this.cry = true; + for (Observer observer : observers) { + observer.actionOnWakeUp(); + } + } +} diff --git a/src/main/java/com/msb/observer/v5/Dad.java b/src/main/java/com/msb/observer/v5/Dad.java new file mode 100644 index 0000000..d2b74a1 --- /dev/null +++ b/src/main/java/com/msb/observer/v5/Dad.java @@ -0,0 +1,23 @@ +package com.msb.observer.v5;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Dad implements Observer { + public void feed() { + System.out.println("孩子醒了,爸爸给孩子喂奶……"); + } + @Override + public void actionOnWakeUp() { + feed(); + } +} diff --git a/src/main/java/com/msb/observer/v5/Mum.java b/src/main/java/com/msb/observer/v5/Mum.java new file mode 100644 index 0000000..90d5cf5 --- /dev/null +++ b/src/main/java/com/msb/observer/v5/Mum.java @@ -0,0 +1,23 @@ +package com.msb.observer.v5;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Mum implements Observer { + public void hug() { + System.out.println("孩子醒了,妈妈抱抱孩子……"); + } + @Override + public void actionOnWakeUp() { + hug(); + } +} diff --git a/src/main/java/com/msb/observer/v5/Observer.java b/src/main/java/com/msb/observer/v5/Observer.java new file mode 100644 index 0000000..4209a51 --- /dev/null +++ b/src/main/java/com/msb/observer/v5/Observer.java @@ -0,0 +1,11 @@ +package com.msb.observer.v5; + +/** + * @Author bingor + * @Date 2022/10/13 19:33 + * @Description: com.msb.observer.v5 + * @Version: 1.0 + */ +public interface Observer { + public void actionOnWakeUp(); +} diff --git a/src/main/java/com/msb/observer/v5/Observer05.java b/src/main/java/com/msb/observer/v5/Observer05.java new file mode 100644 index 0000000..20dfb17 --- /dev/null +++ b/src/main/java/com/msb/observer/v5/Observer05.java @@ -0,0 +1,22 @@ +package com.msb.observer.v5;/** + * @Author bingor + * @Date 2022/10/13 19:28 + * @Description: com.msb.observer.v4 + * @Version: 1.0 + */ + +import com.msb.observer.v5.Child; + +/** + *@ClassName Observer04 + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:28 + *@Version 3.0 + */ +public class Observer05 { + public static void main(String[] args) { + Child child = new Child(); + child.wakeUp(); + } +} diff --git a/src/main/java/com/msb/observer/v6/Child.java b/src/main/java/com/msb/observer/v6/Child.java new file mode 100644 index 0000000..b6a06ef --- /dev/null +++ b/src/main/java/com/msb/observer/v6/Child.java @@ -0,0 +1,40 @@ +package com.msb.observer.v6;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v2 + * @Version: 1.0 + */ + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + *@ClassName Child + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Child { + + private boolean cry = false; + private List observers = new ArrayList<>(); + + { + observers.add(new Dad()); + observers.add(new Mum()); + } + + public boolean isCry() { + return cry; + } + + public void wakeUp() { + this.cry = true; + WakeUpEvent event = new WakeUpEvent(LocalDateTime.now(), "bed"); + for (Observer observer : observers) { + observer.actionOnWakeUp(event); + } + } +} diff --git a/src/main/java/com/msb/observer/v6/Dad.java b/src/main/java/com/msb/observer/v6/Dad.java new file mode 100644 index 0000000..ae06fc6 --- /dev/null +++ b/src/main/java/com/msb/observer/v6/Dad.java @@ -0,0 +1,25 @@ +package com.msb.observer.v6;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Dad implements Observer { + public void feed() { + System.out.println("孩子醒了,爸爸给孩子喂奶……"); + } + @Override + public void actionOnWakeUp(WakeUpEvent event) { + if("hungry".equals(event.getLocation())) { + feed(); + } + } +} diff --git a/src/main/java/com/msb/observer/v6/Mum.java b/src/main/java/com/msb/observer/v6/Mum.java new file mode 100644 index 0000000..69be1fb --- /dev/null +++ b/src/main/java/com/msb/observer/v6/Mum.java @@ -0,0 +1,25 @@ +package com.msb.observer.v6;/** + * @Author bingor + * @Date 2022/10/13 19:18 + * @Description: com.msb.observer.v3 + * @Version: 1.0 + */ + +/** + *@ClassName Dad + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:18 + *@Version 3.0 + */ +public class Mum implements Observer { + public void hug() { + System.out.println("孩子醒了,妈妈抱抱孩子……"); + } + @Override + public void actionOnWakeUp(WakeUpEvent event) { + if("bed".equals(event.getLocation())) { + hug(); + } + } +} diff --git a/src/main/java/com/msb/observer/v6/Observer.java b/src/main/java/com/msb/observer/v6/Observer.java new file mode 100644 index 0000000..5ac1133 --- /dev/null +++ b/src/main/java/com/msb/observer/v6/Observer.java @@ -0,0 +1,11 @@ +package com.msb.observer.v6; + +/** + * @Author bingor + * @Date 2022/10/13 19:33 + * @Description: com.msb.observer.v5 + * @Version: 1.0 + */ +public interface Observer { + public void actionOnWakeUp(WakeUpEvent event); +} diff --git a/src/main/java/com/msb/observer/v6/Observer06.java b/src/main/java/com/msb/observer/v6/Observer06.java new file mode 100644 index 0000000..eee7b57 --- /dev/null +++ b/src/main/java/com/msb/observer/v6/Observer06.java @@ -0,0 +1,20 @@ +package com.msb.observer.v6;/** + * @Author bingor + * @Date 2022/10/13 19:28 + * @Description: com.msb.observer.v4 + * @Version: 1.0 + */ + +/** + *@ClassName Observer04 + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:28 + *@Version 3.0 + */ +public class Observer06 { + public static void main(String[] args) { + Child child = new Child(); + child.wakeUp(); + } +} diff --git a/src/main/java/com/msb/observer/v6/WakeUpEvent.java b/src/main/java/com/msb/observer/v6/WakeUpEvent.java new file mode 100644 index 0000000..1d47564 --- /dev/null +++ b/src/main/java/com/msb/observer/v6/WakeUpEvent.java @@ -0,0 +1,33 @@ +package com.msb.observer.v6;/** + * @Author bingor + * @Date 2022/10/13 19:56 + * @Description: com.msb.observer.v6 + * @Version: 1.0 + */ + +import java.time.LocalDateTime; + +/** + *@ClassName WakeUpEvent + *@Description TODO + *@Author bingor + *@Date 2022/10/13 19:56 + *@Version 3.0 + */ +public class WakeUpEvent { + private LocalDateTime localDateTime; + private String location; + + public WakeUpEvent(LocalDateTime localDateTime, String location) { + this.localDateTime = localDateTime; + this.location = location; + } + + public LocalDateTime getLocalDateTime() { + return localDateTime; + } + + public String getLocation() { + return location; + } +}