我的Android应用程序中有一个Application类,我们可以调用它
MyApplication.
我有实用程序类,我在其中实例化一次,然后在应用程序中的任何地方使用
让我们说:
TimeConverter
ImageManager
现在,我需要在一些asynctask类'构造函数
中传递它们这两种方式之间有区别吗?:
变式1:
我单独传递了每一个
MyApplication application = (MyApplication) getApplication();
new SomeAsyncTask(application.timeConverter, application.imageManager).execute():
class SomeAsyncTask extends AsyncTask<Void, Void, Void> {
TimeConverter timeConverter;
ImageManager imageManager;
public SomeAsyncTask(TimeConverter timeConverter, ImageManager imageManager) {
this.timeConverter = timeConverter;
this.imageManager = imageManager;
}
doInBackground...
}
变体2:
MyApplication application = (MyApplication) getApplication();
new SomeAsyncTask(application).execute():
class SomeAsyncTask extends AsyncTask<Void, Void, Void> {
TimeConverter timeConverter;
ImageManager imageManager;
public SomeAsyncTask(MyApplication application) {
this.timeConverter = application.timeConverter;
this.imageManager = application.imageManager;
}
doInBackground...
}
从OOP的角度(或任何其他观点)使用构造函数的这两种方式是否有一些切实的区别
答案 0 :(得分:1)
没有什么不同,但变体2更灵活。
因为如果要扩展构造,调用者不需要更改方法,所有新参数(例如Stringconverter或类似的东西)也可以在应用程序对象中。
Java中的这个原理称为值对象或DTO(数据传输对象) 请参阅:http://martinfowler.com/bliki/ValueObject.html