设计模式之观察者模式
来源:互联网 发布:知乎 找工作 编辑:程序博客网 时间:2024/06/02 01:45
/** * */package com.handy.ps;import java.util.ArrayList;import java.util.List;/** * @author handy * */abstract class Subject {List<Observer> listObserver = new ArrayList<Observer>();public void addObserver(Observer o) {listObserver.add(o);}public void removeObserver(Observer o) {listObserver.remove(o);}public void notifyObserver() {for (Observer o : listObserver) {o.update();}}}
/** * */package com.handy.ps;/** * @author handy * */abstract class Observer { public abstract void update();}
/** * */package com.handy.ps;/** * @author handy * */public class ConcreteSubject extends Subject{ private String subjectState;/** * @return the subjectState */public String getSubjectState() {return subjectState;}/** * @param subjectState the subjectState to set */public void setSubjectState(String subjectState) {this.subjectState = subjectState;}}
/** * */package com.handy.ps;/** * @author handy * */public class ConcreteObserver extends Observer {private String name;// 观察者的名字private String observerState;// 观察者的状态private ConcreteSubject concreteSubject;// 被观察的对象/** * @param name * @param concreteSubject */public ConcreteObserver(String name, ConcreteSubject concreteSubject) {super();this.name = name;this.concreteSubject = concreteSubject;}/** * @return the name */public String getName() {return name;}/** * @param name * the name to set */public void setName(String name) {this.name = name;}/** * @return the observerState */public String getObserverState() {return observerState;}/** * @param observerState * the observerState to set */public void setObserverState(String observerState) {this.observerState = observerState;}/** * @return the concreteSubject */public ConcreteSubject getConcreteSubject() {return concreteSubject;}/** * @param concreteSubject * the concreteSubject to set */public void setConcreteSubject(ConcreteSubject concreteSubject) {this.concreteSubject = concreteSubject;}@Overridepublic void update() {// TODO Auto-generated method stubobserverState = concreteSubject.getSubjectState();System.out.println("观察者:" + this.getName() + "的状态为:"+ this.getObserverState());}}
package com.handy.ps;public class TestPS {public static void main(String[] args) {ConcreteSubject s = new ConcreteSubject();s.addObserver(new ConcreteObserver("Observer1", s));s.addObserver(new ConcreteObserver("Observer2", s));s.addObserver(new ConcreteObserver("Observer3", s));s.setSubjectState("Runing");s.notifyObserver();s.setSubjectState("Blocking");s.notifyObserver();}}