双亲委托模型,其实就是递归调用。
把原本的按优先级顺序调用,改为递归调用。
模拟:
优先级:A > B > C
A 用来加载 “a”
B 用来加载 “b”
C 用来加载其他
顺序调用:
D#loadClass()
public Class loadClass(String name) {
if (name == "a") {
return A.findClass();
} else if (name == "b") {
return B.findClass();
} else {
return C.findClass();
}
}
递归调用:
C#loadClass()
public Class loadClass(String name) {
Class class = B.loadClass(name);
if (class != null) {
return class;
} else {
return findClass(name);
}
}
B#loadClass()
public Class loadClass(String name) {
Class class = A.loadClass(name);
if (class != null) {
return class;
} else if (name == "b") {
return findClass(name);
} else {
return null;
}
}
A#loadClass()
public Class loadClass(String name) {
if (name == "a") {
return findClass(name);
} else {
return null;
}
}