观察者模式
观察者定义了一种一对多的依赖关系,多个观察者监听一个主题对象,当主题对象的状态发生改变时,这些观察者会被通知从而自我跟新。
结构图
具体代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
abstract class Subject{
private ArrayList<BaseObserver> list=new ArrayList<>();
public void attach(BaseObserver observer){ list.add(observer); }
public void Deattach(Observer observer){ list.remove(observer); }
public void notifyall(){ for(BaseObserver observer:list){ observer.update(); } }
}
class ConcreteSubject extends Subject{
private int state;
public int getState() { return state; }
public void setState(int state) { this.state = state; } }
abstract class BaseObserver { protected Subject subject; public abstract void update(); }
class BinaryObserver extends BaseObserver{
public BinaryObserver(Subject subject){ this.subject=subject; }
@Override public void update() { System.out.println("BinaryObserver update"); } }
class HexaObserver extends BaseObserver{
public HexaObserver(Subject subject){ this.subject=subject; }
@Override public void update() { System.out.println("HexaObserver update"); } }
public class Observer { public static void main(String[]args){
ConcreteSubject subject=new ConcreteSubject(); BaseObserver hexaobserver=new HexaObserver(subject); BaseObserver binaryObserver=new BinaryObserver(subject);
//添加观察者 subject.attach(hexaobserver); subject.attach(binaryObserver);
subject.setState(1); subject.notifyall();
} }
输出:
HexaObserver update BinaryObserver update
|
近期评论