日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用计算机窃听,observer模拟监听器的实现

發(fā)布時(shí)間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用计算机窃听,observer模拟监听器的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

observer模擬監(jiān)聽器的實(shí)現(xiàn)

考試吧(Exam8.com) 2008-10-14 08:00:00 評論(0)條

學(xué)過awt,尤其是swing的就知道,swing中observer模式被大量的使用。比如,button.addActionListener(...)后,一旦你點(diǎn)擊button后就能觸發(fā)相應(yīng)的事件。很多人一定想知道內(nèi)部的機(jī)制。

假設(shè)有一臺電腦。電腦里面有一個(gè)事件,當(dāng)你按下電源按鈕的時(shí)候,那么顯示器會亮,電源指示燈也會亮。

Examda提示:這是典型的一個(gè)類似于GUI中按鈕事件模擬。

我們來分析一下需要幾個(gè)類

電腦肯定是需要的,我們得出Computer類。Computer類內(nèi)部有一個(gè)按電源按鈕的動作,我們叫做clickButton.這個(gè)事件我們叫做EventPowerOn.于是得出了EventPowerOn類。另外,對比GUI里面的button,他們都會添加監(jiān)聽器,所以應(yīng)該有個(gè)監(jiān)聽器類,我們叫做EventPowerOnListener。好到這里我們基本上找出了幾個(gè)必須的類Computer,EventPowerOn ,EventPowerOnListener

我們寫出他們的框架:

public class Computer implements Runnable{

public void clikButton(){}//該方法如果被調(diào)用,那么說明電源按鈕被按下

}

public class EventPowerOn {

private Object source;//事件的來源,也就是時(shí)間是由哪一個(gè)對象激發(fā)的

private long time;//這個(gè)屬性是隨意添加的 比如社么時(shí)候電源按鈕被按下

public EventPowerOn( long time, Object object) {

super();

this.source = object;

this.time = time;

}

public Object getObject() {

return source;

}

public void setObject(Object object) {

this.source = object;

}

public long getTime() {

return time;

}

public void setTime(long time) {

this.time = time;

}

}

public interface EventPowerOnListener {

public void performanceToPowerOn(EventPowerOn eventPowerOn);//改方法是電源按鈕被

//按后應(yīng)的響應(yīng)

}

Examda提示:剛才我們說,電源按鈕被按下,那么顯示器和電源指示器會變亮。那么顯示器和電源指示器應(yīng)該都另外做一個(gè)類

所以有:

public class Screen implements EventPowerOnListener{

public void performanceToPowerOn(EventPowerOn eventPowerOn) {

System.out.println(eventPowerOn.getTime());

System.out.println("Screen is on");

}

}

public class Light implements EventPowerOnListener{

public void performanceToPowerOn(EventPowerOn eventPowerOn) {

System.out.println(eventPowerOn.getTime());

System.out.println("power light is on");

}

}

為什么我們要用他們實(shí)現(xiàn)監(jiān)聽器類呢,因?yàn)閷omputer來說,他們都是監(jiān)聽器。一旦電源按鈕被按下,顯示器和電源指示器就應(yīng)該要有反應(yīng)。

那么如何將screen 和light添加進(jìn)computer 呢。我們做如下的改動

public class Computer {

private List listeners=new ArrayList();

public void addEventPowerOnListener(EventPowerOnListener eventPowerOnListener)

{

listeners.add(eventPowerOnListener);

}

public void clikButton(){

for(EventPowerOnListener temp:listeners)

{

temp.performanceToPowerOn(new EventPowerOn(System.currentTimeMillis(),this) );

}

}

}

好了,一個(gè)模擬的例子就完成了。我們來測試一下:

public class testObserver {

public static void main(String[] args){

Computer computer=new Computer();

Screen screen=new Screen();

Light light=new Light();

computer.addEventPowerOnListener(screen);

computer.addEventPowerOnListener(light);

computer.click();

};

}

看戲結(jié)果:

1219215665656

Screen is on

1219215665656

power light is on

說明clickButton,那么顯示器和電源指示燈都會亮。我們還可以添加另外一些監(jiān)聽器,比如,硬盤會轉(zhuǎn)等。。只需實(shí)現(xiàn)listner接口以及添加到computer的監(jiān)聽列表即可。。

(最近回過頭來看java的一些基礎(chǔ)的東西,看swing的時(shí)候,突然很想知道observer模式到底是則么實(shí)現(xiàn)的,研究了一下,看了一些源碼,有了些心得,就順便寫出來)

展開全文

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的利用计算机窃听,observer模拟监听器的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。