这两个构造函数的使用方式有何不同?

时间:2014-11-22 11:45:47

标签: java android

我的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的角度(或任何其他观点)使用构造函数的这两种方式是否有一些切实的区别

1 个答案:

答案 0 :(得分:1)

没有什么不同,但变体2更灵活。

因为如果要扩展构造,调用者不需要更改方法,所有新参数(例如Stringconverter或类似的东西)也可以在应用程序对象中。

Java中的这个原理称为值对象或DTO(数据传输对象) 请参阅:http://martinfowler.com/bliki/ValueObject.html