回调(CallBack)
又名钩子函数(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)的更多相关文章
- [转] Java内部类之闭包(closure)与回调(callback)
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...
- python的回调callback
python的回调callback很强大,特别是函数参数可以是kw,因为一个函数编译后对应函数对象,函数对象中包含了参数的信息,当你调用函数时,会判断传入参数是否正确.通过导入模块,可以使用模块中的函 ...
- 【Android 应用开发】Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...
- 安卓程序代写 网上程序代写[原]Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 1. 如何定义一个回调 a. 定义接口 : 在 ...
- js方法传入对象;js方法传入方法;js方法回调 callback
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...
- java与安卓中的回调callback学习笔记
1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...
- C++中回调(CallBack)的使用方法(其实就是类方法指针,我觉得你的方法易用性不好,虽然原理正确)
回调函数是一个很有用,也很重要的概念.当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数.回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgP ...
- 理解JS中的回调(Callback)函数
今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...
- 关于回调(callback)
如果要理解回调,需要在分同步通信.异步通信的基础上了解 举个通俗的例子: 你打电话问书店老板有没有<JS>这本书,如果是同步通信机制,书店老板会说,你稍等,"我查一下" ...
随机推荐
- hihocoder 1513 小Hi的烦恼——bitset
题目:http://hihocoder.com/problemset/problem/1513 自带的题解写得很好…… #include<cstdio> #include<cstri ...
- LOJ 6053 简单的函数——min_25筛
题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...
- RequiresAuthentication
@RequiresAuthentication 验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时. @RequiresUser 验证用户是否被记忆,us ...
- R(1):中文乱码解决方案
读取csv文件出现中文乱码方案,增加编码格式参数 read.csv(trainPath,header=TRUE,stringsAsFactors=TRUE,encoding = "UTF-8 ...
- C#.net 微信公众账号接口开发
微信越来越火,微信公众平台成为开发成新宠,本文用C#.net开发微信公众信号接口. 微信接口地址代码: weixin _wx = new weixin(); string postStr = &quo ...
- mac的framework的路径
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/S ...
- Android之WebViewClient与WebChromeClient的区别
Android之WebViewClient与WebChromeClient的区别 2012-05-05 0个评论 收藏 我要投稿 ANDROID应用开发的时候可能会用到WE ...
- lwip编译选项
修改默认选项时,不要修改opt.h文件,通过lwipopts.h修改. 和内存管理以及TCP发送性能相关的选项 // 为1时使用系统库malloc/free进行内存管理 #ifndef MEM_LIB ...
- SecureCRT SSH主机秘钥配置文件管理
选择Options(选项)->Global Options(全局选项)-> SSH HOST Keys
- 为MyEclipse配置Spring的约束
1.Spring框架概述 Spring是一个Service层的框架,可以整合许多其它框架进行工作 Spring的主要技术是 IOC(DI) AOP IOC - 控制反转(依赖注入) AOP - 免息那 ...