我在Java库(open-m3u)中有一个类,只需稍作更改即可。 我无需使用该库即可轻松实现该功能。该库是开源的,因此我可以访问其所有代码。该类的创建方式无法继承它,甚至无法更改其中的一小部分。我的问题是,我应该复制该类及其依赖的所有类,并将它们放入我自己的代码库中并更改功能,还是应该自己实现此功能。还是还有其他选择?
答案 0 :(得分:1)
Decorator pattern允许您向现有对象添加新功能。
如果您使用的Java库具有这样的任何类:
public class LibraryClass implement ILibraryInterface {
public void someMethod() {
...
}
}
然后您可以创建Decorator
类:
public class LibraryClassDecorator implement ILibraryInterface {
private LibraryClass libObj;
public LibraryClassDecorator(LibraryClass libObj) {
this.libObj = libObj;
}
public void someMethod() {
libObj.someMethod();
// here you can do whatever you want.
// Add some additional logic
// transform result value if there is some
}
}
注意:您必须实现相同的界面才能遵循Liskov substitution principle
答案 1 :(得分:1)
该功能很容易自行实现,而无需使用 库。
恕我直言,那就是要走的路。您的其他选择是:
它们都有缺点。
总的来说:在25年的专业软件开发中,我已经看到成功使用外部库以及完全失败。有时候,我们花费了更多的时间来评估现有的库(然后发现没有匹配的库),这比我们自己实施特定于项目的解决方案所需的时间还要多。
每一个您可以不用的库,使配置管理和部署更加容易。
答案 2 :(得分:-1)
一种解决方案是制作一个类,以扩展您要更改的类并覆盖要更改的部分