又名钩子函数(C语言里Hook)

不知道如何实现,可以写个回调,

相当于提供个钩子,让别人来挂东西,来实现。

其实就是用多态,实现了分离 。

 package cn.bjsxt.oop.callback;
/**
* awt
* callback 又叫hook 或者 模板方法模式
* 比如一个方法不知道复合物实现,就画个钩子hook或者callback,让别人来实现。
* @author Administrator
*
*/
public class PaintFrame {
//形参列表 写父类名和 对象名 实际传参的时候 有具体的定义好的子类
public static void drawFrame(MyFrame f){
System.out.println("启动线程");
System.out.println("增加循环");
System.out.println("查看消息栈"); //画窗口 不知道怎么实现 由谁实现 由他父类引用指向子类对象 就是多态来实现
//这个地方 你传啥 调啥
f.paint(); System.out.println(" 启动缓存,增加效率");
} public static void main(String[] args) {
drawFrame(new GameFrame01());
drawFrame(new GameFrame02());
}
}
class GameFrame01 extends MyFrame{
public void paint(){
System.out.println("GameFrame01.print()");
System.out.println("画窗口");
}
}
class GameFrame02 extends MyFrame{
public void paint(){
System.out.println("GameFrame02.print()");
System.out.println("画窗口");
}
}
 package cn.bjsxt.oop.callback;
//MyFrame是父类,我希望我的子类都重写我的方法 那么 我干脆 定义成抽象类,或者更彻底 变成接口 实际 项目就是用接口
public abstract class MyFrame {
public abstract void paint();
}
启动线程
增加循环
查看消息栈
GameFrame01.print()
画窗口
启动缓存,增加效率
启动线程
增加循环
查看消息栈
GameFrame02.print()
画窗口
启动缓存,增加效率

实际工作中更多用的是接口,强制你实现重写方法。

我们定义一个接口

 package cn.bjsxt.oop.callback;
//MyFrame是父类,我希望我的子类都重写我的方法 那么 我干脆 定义成抽象类,或者更彻底 变成接口 实际 项目就是用接口
/*
public abstract class MyFrame {
public abstract void paint();
}
*/
//工作都是用接口
interface IMyFrame{
void paint();
}
 package cn.bjsxt.oop.callback;
/**
* awt
* callback 又叫hook 或者 模板方法模式
* 比如一个方法不知道复合物实现,就画个钩子hook或者callback,让别人来实现。
* @author Administrator
*
*/
public class PaintFrame {
//形参列表 写父类名和 对象名 实际传参的时候 有具体的定义好的子类
public static void drawFrame(IMyFrame f){
System.out.println("启动线程");
System.out.println("增加循环");
System.out.println("查看消息栈"); //画窗口 不知道怎么实现 由谁实现 由他父类引用指向子类对象 就是多态来实现
//这个地方 你传啥 调啥
f.paint(); System.out.println(" 启动缓存,增加效率");
} public static void main(String[] args) {
drawFrame(new GameFrame01());
drawFrame(new GameFrame02());
}
}
class GameFrame01 implements IMyFrame{
public void paint(){
System.out.println("GameFrame01.print()");
System.out.println("画窗口");
}
}
class GameFrame02 implements IMyFrame{
public void paint(){
System.out.println("GameFrame02.print()");
System.out.println("画窗口");
}
}
启动线程
增加循环
查看消息栈
GameFrame01.print()
画窗口
启动缓存,增加效率
启动线程
增加循环
查看消息栈
GameFrame02.print()
画窗口
启动缓存,增加效率

说白了,就是多态。

回调(CallBack)的更多相关文章

  1. [转] Java内部类之闭包(closure)与回调(callback)

    闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...

  2. python的回调callback

    python的回调callback很强大,特别是函数参数可以是kw,因为一个函数编译后对应函数对象,函数对象中包含了参数的信息,当你调用函数时,会判断传入参数是否正确.通过导入模块,可以使用模块中的函 ...

  3. 【Android 应用开发】Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...

  4. 安卓程序代写 网上程序代写[原]Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 1. 如何定义一个回调 a. 定义接口 : 在 ...

  5. js方法传入对象;js方法传入方法;js方法回调 callback

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...

  7. java与安卓中的回调callback学习笔记

    1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...

  8. C++中回调(CallBack)的使用方法(其实就是类方法指针,我觉得你的方法易用性不好,虽然原理正确)

    回调函数是一个很有用,也很重要的概念.当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数.回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgP ...

  9. 理解JS中的回调(Callback)函数

    今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...

  10. 关于回调(callback)

    如果要理解回调,需要在分同步通信.异步通信的基础上了解 举个通俗的例子: 你打电话问书店老板有没有<JS>这本书,如果是同步通信机制,书店老板会说,你稍等,"我查一下" ...

随机推荐

  1. ComboBox智能搜索功能

    cmbList.AutoCompleteSource = AutoCompleteSource.ListItems; cmbList.AutoCompleteMode = AutoCompleteMo ...

  2. DataSet和DataTable有用的方法

    每一个DataSet都是一个或多个DataTable 对象的集合(DataTable相当于数据库中的表),这些对象由数据行(DataRow).数据列(DataColumn).字段名(Column Na ...

  3. make_heap()等函数的用法

    1.make_heap() make_heap()用于把一个可迭代容器变成一个堆,默认是大顶堆. 它有三个参数.第一个参数是指向开始元素的迭代器,第二个参数是指向最末尾元素的迭代器,第三个参数是les ...

  4. bzoj4693: 雪中送温暖

    Description 每年的1月10日是温暖节,在这一天,化身出题人的C_SUNSHINE将会给OIer们送温暖.OIer们只要在门口放上一个 仙人掌,就能在早上的某个时刻听到门外传来一声:“开门, ...

  5. appium 3-31603调试分析方法

    1.Appium Log 清晰记录了所有的请求和结果 @Test public void testDebug() throws InterruptedException,IOException{ Mo ...

  6. 关于UC、火狐、谷歌浏览器屏蔽布局中广告的解决办法

     关于UC浏览器屏蔽了广西人才网的名企.品牌.热点的logo,是因为当成广告过滤掉了,以后div的class和id不能以“ad”开头.这可能只是其中一个规则,adxxxx是可以的,不能是adXxxx, ...

  7. date的讲解及分析

    Date() 对象(获取时间的)   不过是用类的写法来实现的:(他也没有私有属性,都是通过__proto__继承来的) Date()  分两大系      一个是get系列(及获取时间)     一 ...

  8. sentinel服务器出现大量的连接问题【转载】

    一.问题现象 redis服务端的sentinel模块存在大量的established状态的连接,并且这些连接一直不被释放,而客户端的连接数正常. 二.问题排查过程 1.根据连接状态进行推断 服务端存在 ...

  9. [UE4]用向量表示方向

    向量的概念 一.物理角度的向量 1)向量就是具有大小和长度的量 2)向量就是空间空的箭头 3)向量可以随意平移 举例:力,force:速度,velcity.这些都是具有大小和方向的量,都可以看成是向量 ...

  10. Linux常用命令收藏

    常见操作: 快速清空文件内容的几种方法:#: > filename # > filename # echo "" > filename # echo > f ...