一、Hook(抽象)函数
来源:互联网 发布:阿里云系统怎么样os 编辑:程序博客网 时间:2024/06/04 15:09
看完高焕堂老师的视频,自己总结下知识。
所谓的Hook,就是用来接合两个东西的接口。如果两个东西于不同时间出现,则一方会预留空间,给予另一方于未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。
Hook函数是Android框架与应用类别的接合处。Android以来类的继承的可Overridable函数来作为主要的Hook函数。
C++例子:
//Ex02-01.cpp#include <iostream>using namespace std;
class <strong>SalesPerson</strong>{protected:double total_amt;public:SalesPerson( double a ) : total_amt(a) {}virtual double <strong><span style="color:#ff6666;">bonus()</span></strong> const =0;};
class <strong>SalesEngineer</strong> : public <strong>SalesPerson</strong> {public:SalesEngineer(double a):SalesPerson(a) {}virtual double <strong><span style="color:#ff6666;">bonus()</span></strong> const{ return( total_amt * 0.008 + 500.0 ); }};
class <strong>SalesManager</strong> : public <strong>SalesPerson</strong> {public:SalesManager(double a):SalesPerson(a) {}virtual double <strong><span style="color:#ff6666;">bonus() </span></strong>const{ return( total_amt * 0.008 + 2000.0 ); }};void compute_bonus( const SalesPerson *ps ){ cout << "bonus:" << ps->bonus() << endl; }
int main() {SalesManager peter( 20000.0);SalesEngineer alvin( 80000.0), lily( 50000.0 );compute_bonus( &peter ); compute_bonus( &alvin );compute_bonus( &lily );system("PAUSE");return EXIT_SUCCESS;}其中,SalesPerson 类的bonus() 虚拟函数就扮演了Hook的角色,作为父、子类别之间的接口。
Java例子:
public abstract classSalesPerson {protected doubletotal_amt;publicSalesPerson(doublea){ total_amt = a; }public abstract doublebonus();}
public classSalesManagerextendsSalesPerson {publicSalesManager(doublea){ super(a); }public doublebonus() {returntotal_amt * 0.008 + 2000.0;}}
public classJMain {static voidcompute_bonus( SalesPerson ps ){ System.out.println("bonus:" + ps.bonus()); }public static voidmain(String[] args) {SalesManager peter = new SalesManager(20000);SalesEngineer alvin =newSalesEngineer(80000);SalesEngineer lily = new SalesEngineer(50000);compute_bonus( peter );compute_bonus( alvin );compute_bonus( lily );}}
再来看看Android中Hook函数的运用:
想再屏幕上呈现ListView窗口,会用到以下三个类:
在这些类中,有许多Hook函数,Activity的onCreate()、BaseAdapter的getView()等。
因为框架的抽象设计在先,之后才配上应用类别,所以在撰写Activity、ListView和BaseAdapter的时候,设计框架的设计者不知道应用的ListView是什么样子,所以预留了虚空给应用去填补,如图
当应用执行时候,框架掌握整个控制权,调用myActivity子类别的onCreate函数。如图:
Hook函数实现了Ioc。
当Activity要求显示ListView的内容时,ListView就从BaseAdapter而反向
调用MyStringAdapter的getView等函数,而取得显示的内容。
Hook函数实现Ioc,促进虚实相依,因此,它在框架设计里占有极为核心的地位。
Hook函数与模式的关系
Hook函数是父子类之间的接口处,在应用框架里有许多抽象(不变)的父子类别,需要Hook函数来衔接,
Factory Method模式:
其中FactoryMethod()就是Hook函数,
Template Method模式:
其中PromitiveOperation()就是Hook函数,
- 一、Hook(抽象)函数
- hook函数教程(一)什么是钩子
- hook使用指南(一)
- Hook(钩子)函数
- Delphi - 关于钩子函数HOOK (一)
- ios hook 小试牛刀(一)
- 第四章 过程抽象——函数(一)
- C++实现.net委托机制---(一)函数抽象
- Hook(一)
- HOOK函数
- 抽象工厂(一)
- 05-抽象(函数)
- 钩子技术、HOOK技术应用(一)
- 也谈SSDT Hook(一)
- 浅谈API HOOK技术(一)
- 可爱的HOOk技术(一)
- 跟着鬼哥学Android java hook(一)
- Hook android系统调用研究(一)
- 利用线程运行栈StackTraceElement设计Android日志模块
- PHP5.5 New features
- 自定义评分
- spring applicationContext.xml的配置文件详解
- PAT (Basic Level) Practise (中文)1026. 程序运行时间(15)
- 一、Hook(抽象)函数
- eclipse4.4(luna)整合maven3.3
- 1. PHP基本语法形式
- Revit插件开发HelloWorld
- 傅里叶分析之掐死教程(完整版)
- 继 <ZMQ的学习和研究> Request-reply worker in C++
- HTTP referer说明
- cocos2d-x 3.x DrawNode的使用
- Java开发环境搭建