【arduino事件封裝】事件封裝 VS 類方法,猜猜誰會贏?

目錄


1.事件封裝
2.事件封裝與類方法比較
3.後記


1.事件封裝

  提到事件封裝,總能讓人想到JAVA的接口,事實上,它就是個接口


在這裏插入圖片描述
  
  首先創建類,具體細節已經在《arduino面向對象編程》詳細介紹過了,下面直接介紹事件:


聲明事件OnLEDBlink;當外部對象調用on()方法時,觸發事件;

 void on()
 {
      OnLEDBlink(); 
 }

 void (*OnLEDBlink)();


給OnLEDBlink賦實體內容:

void LED_13_Blink()
{
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(13,LOW);
    delay(1000);
}


void setup() 
{
  	led.OnLEDBlink = LED_13_Blink;
}


調用對象的on()方法,觸發事件:

void loop() 
{
  	led.on();
}



完整代碼:

class LED
{
  public:
   int    pin;
   bool   state;

   LED(int p)
   {
       pin=p;
       pinMode(pin,OUTPUT);
   }

   void on()
   {
      OnLEDBlink(); 
   }

   void (*OnLEDBlink)();
   
};

LED led(13);

void LED_13_Blink()
{
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(13,LOW);
    delay(1000);
}


void setup() 
{
  	led.OnLEDBlink = LED_13_Blink;
}

void loop() 
{
 	 led.on();
}

  是不是一氣呵成,一、難度都沒有。肯定有人會問了,事件有什麼必要呢?實體要重新寫;觸發也要靠方法,完全沒意義啊?那你想,讓對象的方法和外部建立聯繫的是什麼?是不是恍然大悟了(怪不得叫接口呢)。

  但事實上,除了上述不正經的一點外,事件還有很多好處:事件封裝起來更方便使用且不用更改方法內容,具體分析見下述。


2.事件封裝與類方法比較

  作爲接口,當然是鏈接類和外部的橋樑;這就使得外部做處理時,如果需要用到類,並不需要每個功能都對類的方法做修改,而是隻對外部觸發執行內容做修改即可,此爲封裝。

那麼二者優缺點就出來了:

  作爲方法來說,如果需要執行的東西比較死,(例如上一章的只做LED亮處理),那麼當然用方法更方便;但是遇到此例中LED閃爍來說,如果不讓它1s而是2s閃爍呢?用方法肯定是要修改類的方法了,這對封裝來說極其不友好;因此事件的優越性就體現出來了。


3.後記
    雖說二者不能分優劣,但是作爲良好的習慣,更多開發者傾向於使用事件封裝,這就好比:用方法來說:你爲了吃飯而去時刻告訴自己你餓了,你餓了...一直到你餓了,然後你去吃飯;用事件來說:你餓了,所以你纔去吃飯,如果你餓了這個事件觸發,你甚至不僅僅是吃飯,你還可能喝水,拓展性也高了點,二者還是有些微妙的區別。



更多精彩歡迎關注【菜小濤的CSDN】。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章