真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

觀察者模式j(luò)ava代碼 觀察者模式偽代碼

java 設(shè)計(jì)模式之 觀察者模式(Observer)

//Subject java

目前累計(jì)服務(wù)客戶上千余家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)建站始終以務(wù)實(shí)、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計(jì)的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

package youngmaster model Observer;

/**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/**

* 察者模式屬于行為型模式 其意圖是定義對象間的一種一對多的依賴關(guān)系

* 當(dāng)一個對象的狀態(tài)發(fā)生改變時 所有依賴于它的對象都得到通知并被自動更新

* 在制作系統(tǒng)的過程中 將一個系統(tǒng)分割成一系列相互協(xié)作的類有一個常見的副作用

* 需要維護(hù)相關(guān)對象間的一致性 我們不希望為了維持一致性而使各類緊密耦合

* 因?yàn)檫@樣降低了他們的可充用性 這一個模式的關(guān)鍵對象是目標(biāo)(Subject)和觀察者(Observer)

* 一個目標(biāo)可以有任意數(shù)目的依賴它的觀察者 一旦目標(biāo)的狀態(tài)發(fā)生改變 所有的觀察者都得到通知

* 作為對這個通知的響應(yīng) 每個觀察者都將查詢目標(biāo)以使其狀態(tài)與目標(biāo)的狀態(tài)同步 這種交互也稱為發(fā)布 訂閱模式

* 目標(biāo)是通知的發(fā)布者 他發(fā)出通知時并不需要知道誰是他的觀察者 可以有任意數(shù)據(jù)的觀察者訂閱并接收通知

*/

/**

* subject

*目標(biāo)接口

*/

public interface Subject {

public void addObserver(Observer o);

public void deletObserver(Observer o);

public void notice();

}

//Observer java

package youngmaster model Observer;

/**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/**

*觀察者接口

*/

public interface Observer {

public void update();

}

//Teacher java

package youngmaster model Observer;

import java util Vector;

/**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/**

*目標(biāo)接口實(shí)現(xiàn)

*/

public class Teacher implements Subject {

private String phone;

@SuppressWarnings( unchecked )

private Vector students;

@SuppressWarnings( unchecked )

public Teacher() {

phone = ;

students = new Vector();

}

@SuppressWarnings( unchecked )

@Override

public void addObserver(Observer o) {

students add(o);

}

@Override

public void deletObserver(Observer o) {

students remove(o);

}

@Override

public void notice() {

for (int i = ; i students size(); i++) { ((Observer) students get(i)) update();

}

}

public void setPhone(String phone) {

this phone = phone;

notice();

}

public String getPhone() {

return phone;

}

}

//Student java

package youngmaster model Observer;

/**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/**

*觀察者接口實(shí)現(xiàn)

*/

public class Student implements Observer {

private String name;

private String phone;

private Teacher teacher;

public Student(String name Teacher teacher) { this name = name; this teacher = teacher;

}

public void show() {

System out println( Name: + name + \nTeacher s phone: + phone);

}

@Override

public void update() {

phone = teacher getPhone();

}

}

//Client java

package youngmaster model Observer;

import java util Vector;

/**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/**

*測試類

*/

public class Client {

/**

* @param args

*/

@SuppressWarnings( unchecked )

public static void main(String[] args) {

Vector students = new Vector();

Teacher teacher = new Teacher();

for (int i = ; i ; i++) {

Student student = new Student( student + i teacher); students add(student); teacher addObserver(student);

}

teacher setPhone( );

for (int i = ; i ; i++)

((Student) students get(i)) show();

System out println( \n============================\n );

teacher setPhone( );

for (int i = ; i ; i++)

((Student) students get(i)) show();

}

lishixinzhi/Article/program/Java/gj/201311/27566

JAVA觀察者模式(observer pattern)

StockData( extends Observable)只需要關(guān)注一個事件就好了。把多余的代碼分割出來,封裝到一個event事件類里。只要有新事件就通知? Investor( implements Observer)觀察者有時間了。具體的時間有觀察者調(diào)用時間的方法來觸發(fā)。這樣代碼會整潔不少,邏輯也會很清晰、、

求 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 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();

}

}

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

這樣在被觀測對象影響范圍廣,可能引起多個類的行為改變時很好用,因?yàn)闊o需修改被觀測對象的代碼就可以增加被觀測對象影響的類,這樣的設(shè)計(jì)模式使得代碼易于管理和維護(hù),并且減少了出錯幾率

至于異步機(jī)制實(shí)際是個噱頭,可以有觀測對象來實(shí)現(xiàn)異步,也可以有觀察者自身實(shí)現(xiàn),這個程序?qū)嶋H是觀測對象實(shí)現(xiàn)了異步機(jī)制,方法是在觀察者類外包裝了一層invoker類


文章名稱:觀察者模式j(luò)ava代碼 觀察者模式偽代碼
標(biāo)題URL:http://weahome.cn/article/ddgpddh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部