package TestObserver;
創(chuàng)新互聯(lián)建站專注于雞西網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供雞西營銷型網(wǎng)站建設(shè),雞西網(wǎng)站制作、雞西網(wǎng)頁設(shè)計(jì)、雞西網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造雞西網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供雞西網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
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 VectorInvoker observerList = new VectorInvoker();
public void addObserver(Observer o) {
observerList.add(new Invoker(o));
}
public void removeObserver(Observer o) {
IteratorInvoker 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();
}
}
觀察者模式的精髓在于注冊一個(gè)觀察者觀測可能隨時(shí)變化的對象,對象變化時(shí)就會(huì)自動(dòng)通知觀察者,
這樣在被觀測對象影響范圍廣,可能引起多個(gè)類的行為改變時(shí)很好用,因?yàn)闊o需修改被觀測對象的代碼就可以增加被觀測對象影響的類,這樣的設(shè)計(jì)模式使得代碼易于管理和維護(hù),并且減少了出錯(cuò)幾率
至于異步機(jī)制實(shí)際是個(gè)噱頭,可以有觀測對象來實(shí)現(xiàn)異步,也可以有觀察者自身實(shí)現(xiàn),這個(gè)程序?qū)嶋H是觀測對象實(shí)現(xiàn)了異步機(jī)制,方法是在觀察者類外包裝了一層invoker類
javac HelloWorld.java 是執(zhí)行的相對路徑, 你是在bin目錄下執(zhí)行的,但bin目錄下面沒有HelloWorld.java文件;
1、可以javac E:\test\HelloWorld.java 把全路徑加上
2、配置環(huán)境變量, 在path加入 D:\loveyouth\Java\jdk1.7.0.75\bin;然后進(jìn)入HelloWorld.java所在文件夾中執(zhí)行javac HelloWorld.java命令
3種工廠模式 單例模式 策略模式 用的都很多 其實(shí)實(shí)際開發(fā)中用的最多的還是工廠和單例,其余的根本沒用過。