白盒框架
白盒框架是通过代码层面的继承进行框架扩展
代码层面:继承 和 动态绑定
白盒框架基于继承,为具体类,当我们需要的类的功能和白盒类中的功能类似时,我们可以继承白盒中的非private成员变量,增加或者重写或者重载来实现我们的功能。白盒中我们可以查看成员变量和实现,因此是透明的。
黑盒框架
黑盒框架通过实现特定接口/delegation进行框架扩展
黑盒框架基于委托,为接口类,我们只需要了解黑盒中每个方法的功能,在需要的时候创建类,委托其中的方法实现我们的功能。黑盒我们无法了解具体方法是如何实现的,因此是不透明的。
【两者对比】
白盒框架利用subclassing:
1 允许扩展每一个非私有方法
2 需要理解父类的实现
3 一次只进行一次扩展
4通常被认为是开发者框架
黑盒框架使用委派中的组合composition:
1 允许在接口中对public方法扩展
2 只需要理解接口
3通常提供更多的模块
4 通常被认为是终端用户框架,平台