目录
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();
}
是不是一气呵成,一、难度都没有。肯定有人会问了,事件有什么必要呢?实体要重新写;触发也要靠方法,完全没意义啊?那你想,让对象的方法和外部建立联系的是什么?是不是恍然大悟了(怪不得叫接口呢)。
但事实上,除了上述不正经的一点外,事件还有很多好处:事件封装起来更方便使用且不用更改方法内容,具体分析见下述。
扫描二维码关注公众号,回复:
10810471 查看本文章
2.事件封装与类方法比较
作为接口,当然是链接类和外部的桥梁;这就使得外部做处理时,如果需要用到类,并不需要每个功能都对类的方法做修改,而是只对外部触发执行内容做修改即可,此为封装。
那么二者优缺点就出来了:
作为方法来说,如果需要执行的东西比较死,(例如上一章的只做LED亮处理),那么当然用方法更方便;但是遇到此例中LED闪烁来说,如果不让它1s而是2s闪烁呢?用方法肯定是要修改类的方法了,这对封装来说极其不友好;因此事件的优越性就体现出来了。
3.后记
虽说二者不能分优劣,但是作为良好的习惯,更多开发者倾向于使用事件封装,这就好比:用方法来说:你为了吃饭而去时刻告诉自己你饿了,你饿了...一直到你饿了,然后你去吃饭;用事件来说:你饿了,所以你才去吃饭,如果你饿了这个事件触发,你甚至不仅仅是吃饭,你还可能喝水,拓展性也高了点,二者还是有些微妙的区别。
更多精彩欢迎关注【菜小涛的CSDN】。