我有实现大多数应用程序功能的库项目,它就像一个应用程序模板。使用此库的每个项目都可以重新定义一些资源,主题等。主要案例是获取信息的颜色和网址,此应用程序将显示。但重新定义一些代码更成问题。例如,有一个视图显示来自xml的信息,但xml是不同的,我需要以不同的方式解析它。我目前的认识是这样的。
public class MyView extends LinearLayout {
public setData(XmlData xml) {
//call to helpers static method to get parsed data from xml
ArrayList<Item> items = ParseHelper.getItems(xml);
}
}
所以我需要的只是改变ParseHelper中的一些逻辑。现在我只看到一种方法,重新定义layout.xml以将MyView更改为ProjectMyView,我将更改方法setData以使用另一个ParseHelper。但这并不好。
也许有一些模式或其他方法来解决这个问题?
我认为使用库或项目中不同类的另一种方法是使用reflaction。例如,项目中的包只有名称(com.library.helpers和com.project.helpers)不同,并检查项目中的类,如果存在则使用它,如果没有使用库。但我认为它会使用很多资源。
有人可以分享他们的经历吗?
答案 0 :(得分:1)
您可以将MyView
设为抽象,并让setData
作为未实现的方法,并强制所有子类实现此方法,如下所示:
public abstract class MyAbstractView extends LinearLayout {
public abstract setData(XmlData xml);
}
他们,你的库有一个扩展MyAbstractView
的类,其最常用的实现是这样的:
public class MyView extends MyAbstractView {
public setData(XmlData xml) {
//call to helpers static method to get parsed data from xml
ArrayList<Item> items = ParseHelper.getItems(xml);
}
}
对于那些想要不同实现的人,他们只需要扩展MyAbstractView
。
最后,调用者或这些对象只需要执行以下操作:
public void init(MyAbstractView arg, XmlData xml) {
arg.setData(xml);
}