回调(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) 编辑 收藏 举报