又名钩子函数(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. POJ3208魔鬼数

    题目:http://poj.org/problem?id=3208 与一般的数位dp有点不同的是,没有给出上界,而是要通过值来判断这一位该填什么. 当然是从高位向低位填. 为了知道这一位填下去对答案有 ...

  2. Eclipse相对路径

    Eclipse将java源文件存于src文件夹,而编译生成的class文件存于bin目录下,故以下代码输出的结果为false public class FileTest { public static ...

  3. jsp渲染

    SP与Servlet什么关系?JSP和ASP什么关系?下面我们一一来探讨. 第一个.jsp文件:<html>    <head>           <title> ...

  4. sysbench 0.5 基准测试

    sysbench 介绍 SysBench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.它主要包括以下几种方式的测试: cpu性能 磁盘io性能 调度程 ...

  5. python中hashlib md5

    如下两种方法,结果相同 import hashlib import time m = hashlib.md5() m.update(str(time.time()).encode('utf-8')) ...

  6. 用7z.exe 压缩整个文件夹里的内容

    以下是批处理中的内容: 7z.exe a -tzip zmv9netSrc.zip "D:\IE收藏夹备份\*"pause7z.exe a -tzip zmv9netSrc.zip ...

  7. gdb 调试(设置变量)(六)

    一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次 ...

  8. java 静态导入

  9. 知识点查缺补漏贴01-进程间通讯之mmap文件共享

    引文: 个人名言:“同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人”.经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点.本文是这一系列第一篇:进程间通讯之mmap. 一.概念 ...

  10. JsonCpp使用方法详解

    JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读.编写.解析.jsoncpp是c++解析JSON串常用的解析库之一. jsoncpp中主要的类: ...