Я более склонен согласиться с ответом DJClayworth, но, чтобы ответить на ваш вопрос, лучший способ реализовать шаблон синглтона - это использовать enum:
public enum ImageDownloaderWrapper
{
INSTANCE;
public static final ImageDownloader IMAGE_DOWNLOADER;
private ImageDownloaderWrapper()
{
IMAGE_DOWNLOADER = new ImageDownloader();//this is where you would initialize it... looks like it has a default constructor
}
}
Чтобы получить экземпляр:
ImageDownloaderWrapper.INSTANCE.IMAGE_DOWNLOADER.download(...
Вы также можете воспользоваться статическим импортом:
import static some.package.structure.ImageDownloaderWrapper.INSTANCE;
Тогда это немного проще:
INSTANCE.IMAGE_DOWNLOADER.download(...
Чтобы учесть различные стратегии, я думаю, вам придется расширить ImageDownloader и добавить соответствующую логику для работы со стратегиями в этом подклассе (тип IMAGE_DOWNLOADER также должен соответствовать созданному вами подклассу).