<基类/子类>结构的接口(卡榫sun函数):
卡榫函数就是接合两个东西的接口,如果两个东西于不同的时间出现,则一方会预留虚空.给予另一边于未来时刻能以实体来填充该空间。两者虚实相依,就密合起来了.设计优良的卡榫,可以让实体易于新陈代谢,抽换自如(plug and play,俗称pnp).
实际上就是设计模式里面强调的分离出变与不变,在语法上讲是多态的应用.
变与不变的分离是设计卡榫函数及应用框架之基本原则和手艺.
分离出变与不变后,就可以将不变的部分写在父类(super class)里面,而变的部分写在子类(subclass)里面.
卡榫函数的java实现:
在java里面,使用抽象(abstract)函数或可覆盖(overridable)函数来实现卡榫函数.
复习在C++,在C++里面可以用虚函数或者纯虚函数来实现卡榫函数.
IOC机制与Default函数:
IOC: Inversion of control 控制反转,IOC机制源自于OO语言(如C++等)的类别继承体系,例如C++语言中,基类的函数可以主动调用子类的函数,这就是典型的IOC机制.
基类与子类之间,主控权是在基类手上,透过Hook函数来调用子类.
通常基类是撰写在先,而子类则撰写在后,这种前辈拥有主动权,进而控制后辈之情形,就通称为控制反转. 也
Default函数:基类的重要功能是提供默认(预设)行为.这些默认函数可让子类来继承(或调用),也就是说基类提供了基本的行为,子类在这个行为的基础上再添加父类无法提供的默认行为.
abstract class Sharp{
void drawBackGround(){//default行为
System.out.println("drawBackground");
}
void draw(){//
drawBackGround();
drawSharp();//hook函数,控制反转,父类对子类说你别来调用我,我来调用你.
}
abstract void drawSharp();
}
class DerivedSharp extends Sharp{
@Override
void drawSharp() {
// TODO Auto-generated method stub
System.out.println("drawDerivedShap");
}
}
public class test3 {
public static void main(String[] args){
Sharp b = new DerivedSharp();
b.draw();
}
}
