亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

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

        字號(hào):

        學(xué)過(guò)awt,尤其是swing的就知道,swing中observer模式被大量的使用。比如,button.addActionListener(...)后,一旦你點(diǎn)擊button后就能觸發(fā)相應(yīng)的事件。很多人一定想知道內(nèi)部的機(jī)制。
            假設(shè)有一臺(tái)電腦。電腦里面有一個(gè)事件,當(dāng)你按下電源按鈕的時(shí)候,那么顯示器會(huì)亮,電源指示燈也會(huì)亮。
            Examda提示:這是典型的一個(gè)類似于GUI中按鈕事件模擬。
            我們來(lái)分析一下需要幾個(gè)類
            電腦肯定是需要的,我們得出Computer類。Computer類內(nèi)部有一個(gè)按電源按鈕的動(dòng)作,我們叫做clickButton.這個(gè)事件我們叫做EventPowerOn.于是得出了EventPowerOn類。另外,對(duì)比GUI里面的button,他們都會(huì)添加監(jiān)聽(tīng)器,所以應(yīng)該有個(gè)監(jiān)聽(tīng)器類,我們叫做EventPowerOnListener。好到這里我們基本上找出了幾個(gè)必須的類Computer,EventPowerOn ,EventPowerOnListener
            我們寫(xiě)出他們的框架:
            public class Computer implements Runnable{
            public void clikButton(){}//該方法如果被調(diào)用,那么說(shuō)明電源按鈕被按下
            }
            public class EventPowerOn {
            private Object source;//事件的來(lái)源,也就是時(shí)間是由哪一個(gè)對(duì)象激發(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提示:剛才我們說(shuō),電源按鈕被按下,那么顯示器和電源指示器會(huì)變亮。那么顯示器和電源指示器應(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)聽(tīng)器類呢,因?yàn)閷?duì)computer來(lái)說(shuō),他們都是監(jiān)聽(tīng)器。一旦電源按鈕被按下,顯示器和電源指示器就應(yīng)該要有反應(yīng)。
            那么如何將screen 和light添加進(jìn)computer 呢。我們做如下的改動(dòng)
            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è)模擬的例子就完成了。我們來(lái)測(cè)試一下:
            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
            說(shuō)明clickButton,那么顯示器和電源指示燈都會(huì)亮。我們還可以添加另外一些監(jiān)聽(tīng)器,比如,硬盤(pán)會(huì)轉(zhuǎn)等。。。只需實(shí)現(xiàn)listner接口以及添加到computer的監(jiān)聽(tīng)列表即可。。。
            (最近回過(guò)頭來(lái)看java的一些基礎(chǔ)的東西,看swing的時(shí)候,突然很想知道observer模式到底是則么實(shí)現(xiàn)的,研究了一下,看了一些源碼,有了些心得,就順便寫(xiě)出來(lái)