设计模式
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