PoeticalJustice

导航

回调(CallBack)

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

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

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

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

 

 1 package cn.bjsxt.oop.callback;
 2 /**
 3  * awt
 4  * callback 又叫hook 或者  模板方法模式
 5  * 比如一个方法不知道复合物实现,就画个钩子hook或者callback,让别人来实现。
 6  * @author Administrator
 7  *
 8  */
 9 public class PaintFrame {
10     //形参列表 写父类名和 对象名  实际传参的时候 有具体的定义好的子类
11     public static void drawFrame(MyFrame f){
12         System.out.println("启动线程");
13         System.out.println("增加循环");
14         System.out.println("查看消息栈");
15         
16         //画窗口 不知道怎么实现 由谁实现  由他父类引用指向子类对象 就是多态来实现
17         //这个地方 你传啥 调啥 
18         f.paint();
19         
20         System.out.println(" 启动缓存,增加效率");
21     }
22     
23     public static void main(String[] args) {
24         drawFrame(new GameFrame01());
25         drawFrame(new GameFrame02());
26     }
27 }
28 class GameFrame01 extends MyFrame{
29     public void paint(){
30         System.out.println("GameFrame01.print()");
31         System.out.println("画窗口");
32     }
33 }
34 class GameFrame02 extends MyFrame{
35     public void paint(){
36         System.out.println("GameFrame02.print()");
37         System.out.println("画窗口");
38     }
39 }
1 package cn.bjsxt.oop.callback;
2 //MyFrame是父类,我希望我的子类都重写我的方法 那么 我干脆 定义成抽象类,或者更彻底   变成接口  实际 项目就是用接口
3 public  abstract class MyFrame {
4     public   abstract void paint();
5 }
启动线程
增加循环
查看消息栈
GameFrame01.print()
画窗口
 启动缓存,增加效率
启动线程
增加循环
查看消息栈
GameFrame02.print()
画窗口
 启动缓存,增加效率

 

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

我们定义一个接口

 1 package cn.bjsxt.oop.callback;
 2 //MyFrame是父类,我希望我的子类都重写我的方法 那么 我干脆 定义成抽象类,或者更彻底   变成接口  实际 项目就是用接口
 3  /*
 4 public  abstract class MyFrame {
 5     public   abstract void paint();
 6 }
 7 */
 8 //工作都是用接口 
 9 interface IMyFrame{
10     void paint();
11 }
 1 package cn.bjsxt.oop.callback;
 2 /**
 3  * awt
 4  * callback 又叫hook 或者  模板方法模式
 5  * 比如一个方法不知道复合物实现,就画个钩子hook或者callback,让别人来实现。
 6  * @author Administrator
 7  *
 8  */
 9 public class PaintFrame {
10     //形参列表 写父类名和 对象名  实际传参的时候 有具体的定义好的子类
11     public static void drawFrame(IMyFrame f){
12         System.out.println("启动线程");
13         System.out.println("增加循环");
14         System.out.println("查看消息栈");
15         
16         //画窗口 不知道怎么实现 由谁实现  由他父类引用指向子类对象 就是多态来实现
17         //这个地方 你传啥 调啥 
18         f.paint();
19         
20         System.out.println(" 启动缓存,增加效率");
21     }
22     
23     public static void main(String[] args) {
24         drawFrame(new GameFrame01());
25         drawFrame(new GameFrame02());
26     }
27 }
28 class GameFrame01 implements IMyFrame{
29     public void paint(){
30         System.out.println("GameFrame01.print()");
31         System.out.println("画窗口");
32     }
33 }
34 class GameFrame02 implements IMyFrame{
35     public void paint(){
36         System.out.println("GameFrame02.print()");
37         System.out.println("画窗口");
38     }
39 }
启动线程
增加循环
查看消息栈
GameFrame01.print()
画窗口
 启动缓存,增加效率
启动线程
增加循环
查看消息栈
GameFrame02.print()
画窗口
 启动缓存,增加效率

说白了,就是多态。

posted on 2017-10-03 16:26  PoeticalJustice  阅读(630)  评论(0编辑  收藏  举报