package Ġsn iff Ċ Ċ import Ġcache . factory . Cache Builder Ċ import Ġcache . factory . Caching Strategy Ċ import Ġcache . factory . with Strategy Ċ import Ġloader . implementation . Basic Loader Ċ import Ġloader . implementation . Offline Loader Ċ import Ġloader . implementation . Online Loader Ċ import Ġresolver . Image Resolver Ċ import Ġresolver . Resolver Ċ import Ġservice . Sn iff Service Ċ import Ġservice . services . K tor Service ĊĊ Ċ public Ġenum Ġclass ĠLO ADER Ġ{ ĊĠĠĠ ĠBAS IC , OFF LINE , ON LINE Ċ } Ċ // Ġuse Ġsingleton Ġvalue Ġinstance Ġfor Ġtype Ċ class ĠSn iff Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠIS n iff Factory { ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstance : ĠResolver ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild ( loader Type : LOAD ER , enable Retries : ĠBoolean ?, Ġstrategy : ĠC aching Strategy ?, Ġservice : ĠSn iff Service ?): ĠResolver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! :: instance . isInitialized ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Ġ= Ġif ( strategy != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder Ġwith Strategy Ġstrategy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder Ġwith Strategy Ġ ĠC aching Strategy . LR U ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Service Ġ= Ġservice Ġ?: ĠK tor Service ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= Ġwhen ( loader Type ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADER . BASIC Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Resolver ( Basic Loader ( cache , http Service )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADER . OFF LINE ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Resolver ( Offline Loader ( cache , http Service )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLO ADER . ON LINE ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Resolver ( Online Loader ( cache , http Service )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ