`
TonyLian
  • 浏览: 401537 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【第22条】用类和接口来代替函数指针

阅读更多

    C语言中的函数指针又叫回调(callback)。是用参数传入一个函数指针,调用函数就可以根据不同的传入参数,实际上调用不同的函数了。

 

    这种回调在ActionScript3语言中就是Function类型,Flex的事件监听器就是一个典型的使用场景。将一个Function类型所表示的函数作为参数传给事件监听器,当此事件发生时,就自动调用这个函数。

 

    在设计模式中的策略模式也是一个典型的应用场景。C语言程序通常使用函数指针来实现策略模式。Java中没有指针,我们可以使用类和接口来替代之。

 

    具体的例子可以看书,也可以看看这位高人写的《设计模式》http://www.iteye.com/topic/372233

 

 

 

    这一条很简单,就到这里了。

 

 

【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208

分享到:
评论

相关推荐

    C++编程规范101条规则、准则与最佳实践PDF.rar

    第22条 尽量减少定义性依赖。避免循环依赖 40 第23条 头文件应该自给自足 42 第24条 总是编写内部#include保护符,决不要编写外部#include保护符 43 函数与操作符 45 第25条 正确地选择通过值、(智能)...

    effective c++

    第二条建议:避免使用隐式类型转换。过度依赖隐式类型转换可能导致意料之外的行为,应优先使用显式转换,以增加代码的清晰度和可预测性。 第三条:考虑使用智能指针替代原始指针。智能指针如`std::unique_ptr`、`...

    新手学习C++入门资料

    这种情况多出现在用一个通用的函数指针调用多个函数的场合,其中有些函数不需要函数指针声明中的所有参数。看下面的例子: int fun(int x,int y) { return x*2; } 尽管这样的用法是正确的,但大多数C和C++的...

    Linux编程规范

    - **第二条**:使用`#include"filename.h"`格式来引用非标准库的头文件。这种格式便于编译器从当前目录查找文件,通常用于私有库或本地文件的包含。 - **第三条**:为了避免头文件被重复包含,通常会在自定义头文件...

    cocos2d-x 面试题

    凡是函数体相同的函数都可以用这个模板来代替,只需在模板中定义一次即可。在调用函数时系统会用实参的类型来取代模板中的标识符,从而实现了不同函数的功能。 6. 多态的理解: 多态允许将子类类型的指针赋值给父类...

    Google Coding Style C++

    使用大括号初始化(如 `{}`)来代替传统的赋值操作,可以提高代码的安全性和一致性。 ##### 23. Lambda 表达式 (Lambda Expressions) Lambda 表达式是 C++11 引入的新特性,它可以简化函数对象的定义。合理使用 ...

    MoreEffectiveC++

    #### Item22: 考虑使用op=代替独立op - **定义**:使用复合赋值运算符(如+=)可以提高性能。 - **应用场景**: - 当需要对变量执行修改操作时。 - **注意事项**: - 复合赋值运算符通常比独立运算符更高效; - ...

    c语言第十一章(苏小红版)PPT教案.pptx

    例如,你可以用`for`循环和指针`p`来代替数组下标遍历数组,通过`scanf`和`printf`读写数组元素。这样的方法在处理大量数据时尤为有用,因为它允许我们用指针来迭代,而不需要显式地使用下标。 在函数参数传递方面...

    大厂面试系列二.pdf

    在讨论gets函数在字符数组输入时越界导致程序崩溃的问题时,涉及到对C语言标准库函数的使用和缓冲区溢出的安全性问题。 C++中引用和指针的区别在于,引用是一个变量的别名,而指针是一个变量,存储的是另一个变量的...

    C++编程思想

    stack是另一种常用的数据结构,这部分讲解了如何使用构造函数和析构函数来管理stack中的对象。 **4.6 集合初始化** 集合初始化是C++11中引入的一种初始化语法,用于初始化数组和容器等。 **4.7 缺省构造函数** ...

    more effective C++

    ##### 6.7 Item 22:考虑用运算符的赋值形式(OP=)取代其单独形式(OP) - **赋值运算符**:通常更高效,因为可以避免不必要的临时对象创建。 - **示例**:使用`+=`代替`+`。 ##### 6.8 Item 23:考虑变更程序库 -...

    C++程序设计练习题

    - `Alarm`类和`Rectangle`类的设计较为简单,其中`Alarm`类提供了一个获取名字的方法,而`Rectangle`类则通过构造函数接受坐标参数来初始化矩形对象。 - `Window`类也通过构造函数接受坐标参数来初始化窗口对象,...

    疯狂JAVA讲义

    9.6.5 使用类文件代替资源文件 350 9.6.6 使用NumberFormat格式化数字 350 9.6.7 使用DateFormat格式化日期 352 9.7 本章小结 355 本章练习 355 第10章 异常处理 356 10.1 异常概述 357 10.2 异常处理机制 ...

    高级C语言 学完C语言来看这个绝对收获

    - **函数指针**:理解和使用函数指针,它可以作为参数传递给其他函数。 - **位域**:使用位域节省空间,但要注意不同编译器的实现差异。 #### 9. C语言中实现数组的动态增长 使用realloc()函数动态调整数组大小,...

Global site tag (gtag.js) - Google Analytics