當前位置:編程學習大全網 - 編程語言 - 求 JAVA 異步觀察者模式 的源代碼(完整的),不要同步的,好的給加分

求 JAVA 異步觀察者模式 的源代碼(完整的),不要同步的,好的給加分

package TestObserver;

import java.util.Iterator;

import java.util.Vector;

/**

*

* @author Seastar

*/

interface Observed {

public void addObserver(Observer o);

public void removeObserver(Observer o);

public void update();

}

interface Observer {

public void takeAction();

}

class Invoker {

private Observer o;

Handler handler;

public Invoker(Observer o) {

new Handler();

this.o = o;

}

private class Handler extends Thread {

public Handler() {

handler = this;

}

@Override

public void run() {

o.takeAction();

}

}

public boolean TestSameObserver(Observer o) {

return o == this.o;

}

public void invoke() {

handler.start();

}

}

class ObservedObject implements Observed {

private Vector<Invoker> observerList = new Vector<Invoker>();

public void addObserver(Observer o) {

observerList.add(new Invoker(o));

}

public void removeObserver(Observer o) {

Iterator<Invoker> it = observerList.iterator();

while (it.hasNext()) {

Invoker i = it.next();

if (i.TestSameObserver(o)) {

observerList.remove(i);

break;

}

}

}

public void update() {

for (Invoker i : observerList) {

i.invoke();

}

}

}

class ObserverA implements Observer {

public void takeAction() {

System.out.println("I am Observer A ,state changed ,so i have to do something");

}

}

class ObserverB implements Observer {

public void takeAction() {

System.out.println("I am Observer B ,i was told to do something");

}

}

class ObserverC implements Observer {

public void takeAction() {

System.out.println("I am Observer C ,I just look ,and do nothing");

}

}

public class Main {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

ObserverA a = new ObserverA();

ObserverB b = new ObserverB();

ObserverC c = new ObserverC();

ObservedObject oo = new ObservedObject();

oo.addObserver(a);

oo.addObserver(b);

oo.addObserver(c);

for (int i = 0; i < 5; ++i) {

oo.addObserver(new Observer() {

public void takeAction() {

System.out.println("我是山寨觀察者"+",誰敢攔我");

}

});

}

//sometime oo changed ,so it calls update and informs all observer

oo.update();

}

}

觀察者模式的精髓在於註冊壹個觀察者觀測可能隨時變化的對象,對象變化時就會自動通知觀察者,

這樣在被觀測對象影響範圍廣,可能引起多個類的行為改變時很好用,因為無需修改被觀測對象的代碼就可以增加被觀測對象影響的類,這樣的設計模式使得代碼易於管理和維護,並且減少了出錯幾率

至於異步機制實際是個噱頭,可以有觀測對象來實現異步,也可以有觀察者自身實現,這個程序實際是觀測對象實現了異步機制,方法是在觀察者類外包裝了壹層invoker類

  • 上一篇:男生學設計很難找到工作嗎?
  • 下一篇:c 語言的作用是什麽呢如題 謝謝了
  • copyright 2024編程學習大全網