gpt4 book ai didi

java - 在现有代码中添加/删除某些代码的设计/模式应该是什么

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:19 25 4
gpt4 key购买 nike

我在JAVA PROJECT中收到一个要求,其中包含从现有工作副本中添加删除大量源代码。没有其他出路。根据设计契约(Contract),我不能修改源代码,所以我想到继承这些功能,但是这是唯一的方法吗?因为大约有2000多个文件更改,并且由于JAVA中的访问说明符和结尾,每个文件继承都是不可能的。

示例:考虑一个名为 MenuManager.java 的文件有一种在 MenuBar 中添加 10 个菜单的方法。现在根据我的要求,我需要从现有菜单中删除 5 个菜单,并将新定义的(由我)3 个菜单添加到同一个 MenuBar 中。最简单的选择是覆盖该方法,但是如果整个源代码都存在这种类型的功能更改,该怎么办

最佳答案

从你的描述看来:

  • 当前源代码不能满足您的要求
  • 无法更改或轻松扩展源代码

如果这些都是铁证如山的事实,那么您就面临着困难的境地。前进的一种方法是创建一个单独的架构,当需要使用现有功能时包装现有功能,或者在难以重用时编写新代码。通过这种方式,您可以将现有代码视为一个外部库,并在有意义时使用它。我想到的一些模式是适配器。继承通常不是一个好的前进方式,因为它将扩展(子类)与父类(super class)耦合得太紧密。

所以,给出你的例子:

Consider a File named MenuManager.java is having a method which adds 10 Menus in the MenuBar.Now as per my requirement I need to remove 5 menus from the existing one and add newly defined(by me) 3 Menus into the same MenuBar.

你可以这样做(这只是一个想法,与 Swing 等任何库无关):

// MyMenuManager.java <-- your new class

// method that adds menu items
public void addItems(Menu menu) {
new MenuManager().addItems(menu); // calls the old functionality
// adapt the menu
removeObsoleteItems(menu);
addNewItems(menu);
}

这将是您的第一个版本,理想情况下,您应该将其发展为不再依赖于旧代码,假设您的最终目标是替换旧应用程序(考虑到您的限制,这似乎是合理的)。

还可以使用其他更复杂的模式,例如 anti-corruption layer .

关于java - 在现有代码中添加/删除某些代码的设计/模式应该是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com