设计模式

This commit is contained in:
limqhz
2023-03-01 16:18:34 +08:00
parent 643fb96b11
commit a4a0567740
14 changed files with 211 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package com.quinn.sjms.observer;
/**
* 观察者接收到消息后即进行update更新方法操作对接收到的信息进行处理
*/
public interface Observer {
void update();
}

View File

@@ -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("接受了");
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,9 @@
package com.quinn.sjms.observer;
public class ObserverImpl implements Observer {
@Override
public void update() {
System.out.println("接收到信息,并进行处理!");
}
}

View 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();
}
}
}

View File

@@ -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("韩非子在娱乐");
}
}

View File

@@ -0,0 +1,14 @@
package com.quinn.sjms.observer;
public class SubjectImpl extends Subject {
//具体的业务
public void doSomething(){
/*
* do something
*/
super.notifyObservers();
}
}

View File

@@ -0,0 +1,10 @@
package com.quinn.sjms.text;
import lombok.Data;
@Data
public class CateTaker {
private Memento memento;
}

View File

@@ -0,0 +1,4 @@
package com.quinn.sjms.text;
public interface IWrapperMemento {
}

View File

@@ -0,0 +1,12 @@
package com.quinn.sjms.text;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Memento {
private String state;
}

View 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();
}
}

View 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);
}
}

View File

@@ -0,0 +1,10 @@
package com.quinn.sjms.text;
import lombok.Data;
@Data
public class WrapperCateTaker {
private IWrapperMemento memento;
}

View File

@@ -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;
}
}