标签:state 使用 多线程 override abs 角色 其他 改变 bubuko
定义
定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新
结构
在最基础的观察者模式中,包括以下四个角色:
类图
代码实现
观察者IObserver
public interface IObserver { void update(Subject subject); }
被观察者Subject
import java.util.ArrayList; import java.util.List; public abstract class Subject { private Integer state; private List<IObserver> observers=new ArrayList<IObserver>(); public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public List<IObserver> getObservers() { return observers; } public void setObservers(List<IObserver> observers) { this.observers = observers; } public void rigister(IObserver observer){ observers.add(observer); } public void remove(IObserver observer){ observers.remove(observer); } public void notifys(){ for(int i=0 ; i<observers.size() ;i++ ){ observers.get(i).update(this); } }; }
观察者具体实现
public class ObserverA implements IObserver{ @Override public void update(Subject subject) { System.out.println(subject.getState()); } }
被观察者具体实现
public class ConcreateSubject extends Subject{ public void setState (Integer state){ super.setState(state); notifys(); } }
测试代码
public class Main { public static void main(String[] args) { ObserverA observer1=new ObserverA(); ObserverA observer2=new ObserverA(); ObserverA observer3=new ObserverA(); ConcreateSubject subject=new ConcreateSubject(); subject.rigister(observer1); subject.rigister(observer2); subject.rigister(observer3); subject.setState(2); } }
标签:state 使用 多线程 override abs 角色 其他 改变 bubuko
原文地址:https://www.cnblogs.com/xiaoliangup/p/9123701.html