设计模式学习(4)观察者模式

来源:互联网 发布:荔波二中七天网络 编辑:程序博客网 时间:2024/05/22 12:34

今天来介绍的是,行为模式中的观察者模式

从使用的目的来说,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己

package cn.edu.ken.designpattern.observer;public class ConcreteObserver extends Observer {private String observerState;private String name;private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject concreteSubject, String observer) {// TODO Auto-generated constructor stubthis.observerState = observer;this.name = observer;this.subject = concreteSubject;}@Overridepublic void update() {// TODO Auto-generated method stubobserverState = subject.getSubjectState();System.out.println("name:"+name+",subjectState:"+observerState);}}

package cn.edu.ken.designpattern.observer;public abstract class Observer {public abstract void update();}

package cn.edu.ken.designpattern.observer;public class ConcreteSubject extends Subject {private String subjectState;public String getSubjectState() {return this.subjectState;}public void setSubjectState(String state){this.subjectState = state;}}

package cn.edu.ken.designpattern.observer;import java.util.ArrayList;import java.util.List;public class Subject {List<Observer> observers = new ArrayList();protected void Attach(Observer observer){observers.add(observer);}protected void Detach(Observer observer){observers.remove(observer);}protected void Notify(){for (Observer observer: observers){observer.update();}}}

最后是使用的类

package cn.edu.ken.designpattern.observer;public class Client {public static void main(String[] args){ConcreteSubject subject = new ConcreteSubject();subject.Attach(new ConcreteObserver(subject,"ObserverA"));subject.Attach(new ConcreteObserver(subject,"ObserverB"));subject.Attach(new ConcreteObserver(subject,"ObserverC"));subject.setSubjectState("Ready");subject.Notify();}}


0 0
原创粉丝点击