From a4a05677404e1c62a81f9046e37a6331cfec4731 Mon Sep 17 00:00:00 2001 From: limqhz Date: Wed, 1 Mar 2023 16:18:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/quinn/sjms/observer/Observer.java | 10 +++++++ .../quinn/sjms/observer/ObserverByJava.java | 11 +++++++ .../quinn/sjms/observer/ObserverClient.java | 22 ++++++++++++++ .../com/quinn/sjms/observer/ObserverImpl.java | 9 ++++++ .../java/com/quinn/sjms/observer/Subject.java | 30 +++++++++++++++++++ .../quinn/sjms/observer/SubjectByJava.java | 12 ++++++++ .../com/quinn/sjms/observer/SubjectImpl.java | 14 +++++++++ .../java/com/quinn/sjms/text/CateTaker.java | 10 +++++++ .../com/quinn/sjms/text/IWrapperMemento.java | 4 +++ .../java/com/quinn/sjms/text/Memento.java | 12 ++++++++ .../java/com/quinn/sjms/text/Originator.java | 18 +++++++++++ .../java/com/quinn/sjms/text/TextClient.java | 23 ++++++++++++++ .../com/quinn/sjms/text/WrapperCateTaker.java | 10 +++++++ .../quinn/sjms/text/WrapperOriginator.java | 26 ++++++++++++++++ 14 files changed, 211 insertions(+) create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/Observer.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/ObserverByJava.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/ObserverClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/ObserverImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/Subject.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/SubjectByJava.java create mode 100644 sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/CateTaker.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/IWrapperMemento.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/Memento.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/Originator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/TextClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java create mode 100644 sjms/src/main/java/com/quinn/sjms/text/WrapperOriginator.java diff --git a/sjms/src/main/java/com/quinn/sjms/observer/Observer.java b/sjms/src/main/java/com/quinn/sjms/observer/Observer.java new file mode 100644 index 0000000..325a738 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/Observer.java @@ -0,0 +1,10 @@ +package com.quinn.sjms.observer; + +/** + * 观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理 + */ +public interface Observer { + + void update(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/ObserverByJava.java b/sjms/src/main/java/com/quinn/sjms/observer/ObserverByJava.java new file mode 100644 index 0000000..b32477d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/ObserverByJava.java @@ -0,0 +1,11 @@ +package com.quinn.sjms.observer; + +import java.util.Observable; +import java.util.Observer; + +public class ObserverByJava implements Observer { + @Override + public void update(Observable o, Object arg) { + System.out.println("接受了"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/ObserverClient.java b/sjms/src/main/java/com/quinn/sjms/observer/ObserverClient.java new file mode 100644 index 0000000..79028cc --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/ObserverClient.java @@ -0,0 +1,22 @@ +package com.quinn.sjms.observer; + +public class ObserverClient { + + public static void main(String[] args) { + //创建一个被观察者 + SubjectImpl subject = new SubjectImpl(); + //定义一个观察者 + Observer obs= new ObserverImpl(); + //观察者观察被观察者 + subject.addObserver(obs); + //观察者开始活动了 + subject.doSomething(); + + SubjectByJava subjectByJava = new SubjectByJava(); + ObserverByJava observerByJava = new ObserverByJava(); + subjectByJava.addObserver(observerByJava); + subjectByJava.doSomething(); + + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/ObserverImpl.java b/sjms/src/main/java/com/quinn/sjms/observer/ObserverImpl.java new file mode 100644 index 0000000..25870c0 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/ObserverImpl.java @@ -0,0 +1,9 @@ +package com.quinn.sjms.observer; + +public class ObserverImpl implements Observer { + + @Override + public void update() { + System.out.println("接收到信息,并进行处理!"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/Subject.java b/sjms/src/main/java/com/quinn/sjms/observer/Subject.java new file mode 100644 index 0000000..fc16f83 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/Subject.java @@ -0,0 +1,30 @@ +package com.quinn.sjms.observer; + +import java.util.Vector; + +/** + * 定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类 + * 或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者 + */ +public abstract class Subject { + + //定义一个观察者数组 + //Vector没有太大的差别,ArrayList是线程异步,不安全;Vector是线程同步,安全 + private Vector obsVector = new Vector(); + + //增加一个观察者 + public void addObserver(Observer o){ + this.obsVector.add(o); + } + //删除一个观察者 + public void delObserver(Observer o){ + this.obsVector.remove(o); + } + //通知所有观察者 + public void notifyObservers(){ + for(Observer o:this.obsVector){ + o.update(); + } + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/SubjectByJava.java b/sjms/src/main/java/com/quinn/sjms/observer/SubjectByJava.java new file mode 100644 index 0000000..b7fd796 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/SubjectByJava.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.observer; + +import java.util.Observable; + +public class SubjectByJava extends Observable { + + public void doSomething(){ + super.setChanged(); + this.notifyObservers("韩非子在娱乐"); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java b/sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java new file mode 100644 index 0000000..4d6b8d0 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java @@ -0,0 +1,14 @@ +package com.quinn.sjms.observer; + +public class SubjectImpl extends Subject { + + //具体的业务 + public void doSomething(){ + /* + * do something + */ + super.notifyObservers(); + } + + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/CateTaker.java b/sjms/src/main/java/com/quinn/sjms/text/CateTaker.java new file mode 100644 index 0000000..b7ffca9 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/CateTaker.java @@ -0,0 +1,10 @@ +package com.quinn.sjms.text; + +import lombok.Data; + +@Data +public class CateTaker { + + private Memento memento; + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/IWrapperMemento.java b/sjms/src/main/java/com/quinn/sjms/text/IWrapperMemento.java new file mode 100644 index 0000000..d4f2fc2 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/IWrapperMemento.java @@ -0,0 +1,4 @@ +package com.quinn.sjms.text; + +public interface IWrapperMemento { +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/Memento.java b/sjms/src/main/java/com/quinn/sjms/text/Memento.java new file mode 100644 index 0000000..94e50e6 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/Memento.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.text; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Memento { + + private String state; + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/Originator.java b/sjms/src/main/java/com/quinn/sjms/text/Originator.java new file mode 100644 index 0000000..e01f881 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/Originator.java @@ -0,0 +1,18 @@ +package com.quinn.sjms.text; + +import lombok.Data; + +@Data +public class Originator { + + private String state; + + public Memento createMemento(){ + return new Memento(this.state); + } + + public void restoreMemento(Memento memento) { + this.state = memento.getState(); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/TextClient.java b/sjms/src/main/java/com/quinn/sjms/text/TextClient.java new file mode 100644 index 0000000..2678d96 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/TextClient.java @@ -0,0 +1,23 @@ +package com.quinn.sjms.text; + +public class TextClient { + + public static void main(String[] args) { + WrapperOriginator originator = new WrapperOriginator(); + originator.setState("天津诶哦就是"); + IWrapperMemento memento = originator.createMemento(); + + //定义出备忘录管理员 + WrapperCateTaker caretaker = new WrapperCateTaker(); + caretaker.setMemento(memento); + + originator.setState("道可道"); + System.out.println(originator); + + originator.restoreMemento(caretaker.getMemento()); + + System.out.println(originator); + + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java b/sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java new file mode 100644 index 0000000..a7dfd60 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java @@ -0,0 +1,10 @@ +package com.quinn.sjms.text; + +import lombok.Data; + +@Data +public class WrapperCateTaker { + + private IWrapperMemento memento; + +} diff --git a/sjms/src/main/java/com/quinn/sjms/text/WrapperOriginator.java b/sjms/src/main/java/com/quinn/sjms/text/WrapperOriginator.java new file mode 100644 index 0000000..db9b5fd --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/text/WrapperOriginator.java @@ -0,0 +1,26 @@ +package com.quinn.sjms.text; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class WrapperOriginator { + + private String state; + + public IWrapperMemento createMemento(){ + return new WrapperMemento(this.state); + } + + public void restoreMemento(IWrapperMemento memento) { + this.state = ((WrapperMemento) memento).getState(); + } + + @Data + @AllArgsConstructor + private class WrapperMemento implements IWrapperMemento { + private String state; + } +}