零、设计模式基础

1、变与不变的分离是设计Hook函数及应用框架的基本原则和手艺。

就android框架而言,所谓[不变]的部分,就是它属于各种应用程序件的共同部分,所以不随着应用的改变而改变,因此称之为不变。

分离出变与不变部分之后,就可以将不变部分写在父类别里,而不变的部分就写在子类别里,然后就有类别继承机制组织起来。

public class AA {
private String x;
AA(String str){ x = str; }
public void print(){ System.out.println(x); }
}

 
public class BB {
private int x;
BB(int k){ x = k; }
public void print(){ System.out.println(x); }
}
public class JMain {
public static void main(String[] args) {
AA a = new AA("hello");
a.print();
}}
把以上的程序分离出变与不变--->

步骤一:把AA和BB视为两个不同应用程序里的类别,并且观察其变与不变:

首先从数据成员上的差异,就能看出它们之间的变化点:

String x;<----> int x;

然后就能看出函数的会变的部分:

System.out.println(x);
步骤二:将会变的部分写在Hook函数里:

public class AA {
private String x;
AA(String str){ x = str; }
public final void template_print() {
System.out.println( hook_getData() ); }
public String hook_getData() { return x;
}
}

public class BB {
private int x;
BB(int k){ x = k; }
public final template_print() {
System.out.println( hook_getData() ); }
public String hook_getData() { return String.valueOf(x);
}
}

步骤三:将不变部分写入抽象类


public abstract class SuperAB {
public void template_print(){
System.out.println(hook_getData());
}
protected abstract String hook_getData();
}
public class AA extends SuperAB{
private String x;
AA(String str){ x = str; }
@Override protected String hook_getData() {
return x;
}}
public class BB extends SuperAB{
private int x;
BB(int k){ x = k; }
@Override protected String hook_getData() {
return String.valueOf(x);
}}
public class JMain {
public static void main(String[] args) {
AA a = new AA("hello");
a.template_print();
}}


框架的反向控制IOC

常见的实现机制有:

1、继承+Hook函数(例如Template Method)

2、委托+Hook函数(例如Observer)












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值