设计模式
This commit is contained in:
10
sjms/src/main/java/com/quinn/sjms/observer/Observer.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/observer/Observer.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.quinn.sjms.observer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理
|
||||||
|
*/
|
||||||
|
public interface Observer {
|
||||||
|
|
||||||
|
void update();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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("接受了");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.quinn.sjms.observer;
|
||||||
|
|
||||||
|
public class ObserverImpl implements Observer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
System.out.println("接收到信息,并进行处理!");
|
||||||
|
}
|
||||||
|
}
|
||||||
30
sjms/src/main/java/com/quinn/sjms/observer/Subject.java
Normal file
30
sjms/src/main/java/com/quinn/sjms/observer/Subject.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package com.quinn.sjms.observer;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类
|
||||||
|
* 或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者
|
||||||
|
*/
|
||||||
|
public abstract class Subject {
|
||||||
|
|
||||||
|
//定义一个观察者数组
|
||||||
|
//Vector没有太大的差别,ArrayList是线程异步,不安全;Vector是线程同步,安全
|
||||||
|
private Vector<Observer> obsVector = new Vector<Observer>();
|
||||||
|
|
||||||
|
//增加一个观察者
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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("韩非子在娱乐");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
14
sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java
Normal file
14
sjms/src/main/java/com/quinn/sjms/observer/SubjectImpl.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package com.quinn.sjms.observer;
|
||||||
|
|
||||||
|
public class SubjectImpl extends Subject {
|
||||||
|
|
||||||
|
//具体的业务
|
||||||
|
public void doSomething(){
|
||||||
|
/*
|
||||||
|
* do something
|
||||||
|
*/
|
||||||
|
super.notifyObservers();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
10
sjms/src/main/java/com/quinn/sjms/text/CateTaker.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/text/CateTaker.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.quinn.sjms.text;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CateTaker {
|
||||||
|
|
||||||
|
private Memento memento;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.quinn.sjms.text;
|
||||||
|
|
||||||
|
public interface IWrapperMemento {
|
||||||
|
}
|
||||||
12
sjms/src/main/java/com/quinn/sjms/text/Memento.java
Normal file
12
sjms/src/main/java/com/quinn/sjms/text/Memento.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.quinn.sjms.text;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class Memento {
|
||||||
|
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
}
|
||||||
18
sjms/src/main/java/com/quinn/sjms/text/Originator.java
Normal file
18
sjms/src/main/java/com/quinn/sjms/text/Originator.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
23
sjms/src/main/java/com/quinn/sjms/text/TextClient.java
Normal file
23
sjms/src/main/java/com/quinn/sjms/text/TextClient.java
Normal file
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
10
sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/text/WrapperCateTaker.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.quinn.sjms.text;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class WrapperCateTaker {
|
||||||
|
|
||||||
|
private IWrapperMemento memento;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user