白盒和黑盒框架

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,...)

- 通常称为最终用户框架,平台

在实际应用中,通常是同时使用两种框架,以达到用户的需求。

猜你喜欢

转载自blog.csdn.net/qq_39523768/article/details/80785755
今日推荐