1.白盒框架
- 通过继承和覆盖方法进行扩展
- 通用设计模式:模板方式
- 子类具有主要方法,但对框架进行控制
应用白盒框架的例子:
public abstract class PrintOnScreen {
public void print() {//框架REUSE的主体
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, textToShow());
frame.dispose();
}
protected abstract String textToShow();
}
public class MyApplication extends PrintOnScreen {
@Override
protected String textToShow() {
return "printing this text on "
+ "screen using PrintOnScreen "
+ "white Box Framework";
}
}
2.黑盒框架
- 通过实现插件接口进行扩展
- 通用设计模式:策略模式,观察者模式
- 插件加载机制加载插件并对框架进行控制
应用黑盒框架的例子:
public interface Plugin { String getApplicationTitle(); String getButtonText(); String getInititalText(); void buttonClicked() ; void setApplication(Application app); } public class Application extends JFrame { private JTextField textField; private Plugin plugin; public Application() { } protected void init(Plugin p) { p.setApplication(this); this.plugin = p; JPanel contentPane = new JPanel(new BorderLayout()); contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED)); JButton button = new JButton(); button.setText(plugin != null ? plugin.getButtonText() : "ok"); contentPane.add(button, BorderLayout.EAST); textField = new JTextField(""); if (plugin != null) textField.setText(plugin.getInititalText()); textField.setPreferredSize(new Dimension(200, 20)); contentPane.add(textField, BorderLayout.WEST); if (plugin != null) button.addActionListener((e) -> { plugin.buttonClicked(); } ); this.setContentPane(contentPane); ... } public String getInput() { return textField.getText(); } }
3.黑盒框架和白盒框架对比
白盒框架使用子类/子类型---继承
- 允许扩展每个非私有方法
- 需要了解超类的实现
- 一次只能有一个分机
- 汇编在一起
- 通常所谓的开发者框架
黑盒框架使用组合 - 委派/组合
- 允许扩展在界面中显示的功能
- 只需要了解接口
- 多个插件
- 通常提供更多的模块化
- 可以单独部署(.jar,.dll,...)
- 通常称为最终用户框架,平台
在实际应用中,通常是同时使用两种框架,以达到用户的需求。