【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】。

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