Java 在现有代码中添加/删除某些代码的设计/模式应该是什么
我在JAVA项目中得到了一个需求,该项目包含从现有工作副本中大量添加和删除源代码。没有别的出路了。根据设计合同,我不能修改源代码,所以我想到了继承这些特性,但这是唯一的方法吗?因为大约有2000多个文件发生了变化,并且由于JAVA中的访问说明符和final,每个文件继承都是不可能的 例如: 考虑一个名为MenuManager.java的文件有一个在菜单栏中添加10个菜单的方法。根据我的要求,我需要从现有的菜单中删除5个菜单,并将新定义的(3个)菜单添加到同一个菜单栏中。Java 在现有代码中添加/删除某些代码的设计/模式应该是什么,java,design-patterns,Java,Design Patterns,我在JAVA项目中得到了一个需求,该项目包含从现有工作副本中大量添加和删除源代码。没有别的出路了。根据设计合同,我不能修改源代码,所以我想到了继承这些特性,但这是唯一的方法吗?因为大约有2000多个文件发生了变化,并且由于JAVA中的访问说明符和final,每个文件继承都是不可能的 例如: 考虑一个名为MenuManager.java的文件有一个在菜单栏中添加10个菜单的方法。根据我的要求,我需要从现有的菜单中删除5个菜单,并将新定义的(3个)菜单添加到同一个菜单栏中。 因此,最简单的选择是覆盖
因此,最简单的选择是覆盖方法,但如果整个源代码中都存在这种类型的功能更改,该怎么办?如果代码是在考虑插件体系结构的情况下开发的,则可以在构建过程或运行时启用和禁用您想要的和不想要的功能。问题是,听起来原始源代码并不是设计用来做这件事的 如果合适的话,继承是一种选择。您可能可以覆盖某些调用,使它们执行更多您想要的操作 在您的示例中,您可以在添加组件后修改组件:
final JMenuBar menubar = new JMenuBar();
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
JFrame f = new JFrame();
f.setSize(300, 300);
f.setJMenuBar(menubar);
menubar.add(new JMenu("Magic"));
menubar.add(new JMenu("Stain"));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
for(int i = 0; i < menubar.getMenuCount(); i++)
{
JMenu item = menubar.getMenu(i);
if(item != null && "Magic".equals(item.getText()))
{
menubar.remove(i);
i--;
menubar.doLayout();
}
}
}
});
final JMenuBar menubar=new JMenuBar();
SwingUtilities.invokeAndWait(新的Runnable()
{
公开募捐
{
JFrame f=新的JFrame();
f、 设置大小(300300);
f、 setJMenuBar(菜单栏);
菜单栏添加(新JMenu(“Magic”);
菜单栏。添加(新JMenu(“染色”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 setVisible(真);
}
});
SwingUtilities.invokeAndWait(新的Runnable()
{
公开募捐
{
for(int i=0;i
显然,您希望包装这种代码,以便轻松地从菜单栏中删除某些元素
关于你的问题,最难的是你有相反的要求。“我不能修改源代码”和“大量添加和删除源代码”
听起来你想把项目推向另一个方向。如果代码是在考虑插件架构的情况下开发的,那么无论是作为构建过程的一部分还是作为运行时的一部分,你都可以启用和禁用你想要和不想要的功能。问题是,听起来原始源代码并不是设计用来做这件事的 如果合适的话,继承是一种选择。您可能可以覆盖某些调用,使它们执行更多您想要的操作 在您的示例中,您可以在添加组件后修改组件:
final JMenuBar menubar = new JMenuBar();
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
JFrame f = new JFrame();
f.setSize(300, 300);
f.setJMenuBar(menubar);
menubar.add(new JMenu("Magic"));
menubar.add(new JMenu("Stain"));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
for(int i = 0; i < menubar.getMenuCount(); i++)
{
JMenu item = menubar.getMenu(i);
if(item != null && "Magic".equals(item.getText()))
{
menubar.remove(i);
i--;
menubar.doLayout();
}
}
}
});
final JMenuBar menubar=new JMenuBar();
SwingUtilities.invokeAndWait(新的Runnable()
{
公开募捐
{
JFrame f=新的JFrame();
f、 设置大小(300300);
f、 setJMenuBar(菜单栏);
菜单栏添加(新JMenu(“Magic”);
菜单栏。添加(新JMenu(“染色”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 setVisible(真);
}
});
SwingUtilities.invokeAndWait(新的Runnable()
{
公开募捐
{
for(int i=0;i
显然,您希望包装这种代码,以便轻松地从菜单栏中删除某些元素
关于你的问题,最难的是你有相反的要求。“我不能修改源代码”和“大量添加和删除源代码”
听起来你想把项目转向另一个方向。根据你的描述,似乎:
- 当前的源代码不能满足您的要求
- 您无法更改或轻松扩展源代码
//MyMenuManager.java根据您的描述,似乎:
- 当前的源代码不能满足您的要求
- 您无法更改或轻松扩展源代码
如果这些都是确凿的事实,那么你将面临一个困难的局面。一种方法是创建一个独立的架构