package Ġbr . ped ro so . calculator sample . di Ċ Ċ object ĠService Locator Ġ{ ĊĠĠĠ Ġprivate Ġval Ġservices Map Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠĠĠ Ġfun Ġregister Service ( service Instance : ĠAny ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Service ( service Instance . java Class . name , Ġservice Instance ) ĊĊĠĠĠ Ġfun Ġregister Service ( tag : ĠString , Ġservice Instance : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservices Map [ tag ] Ġ= Ġservice Instance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġregister Service ( service Class : ĠClass < T >, Ġservice Instance : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Service ( service Class . name , Ġservice Instance ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġget Service ( service Class : ĠClass < T >): ĠT ? Ġ= Ġget Service ( service Class . name ) ĊĊĠĠĠ Ġfun Ġ< T > Ġget Service ( tag : ĠString ): ĠT ? Ġ= Ġservices Map [ tag ] Ġas ? ĠT ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Or Register Service ( tag : ĠString , Ġinstantiation Action : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġservice : ĠT ? Ġ= Ġget Service ( tag ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( service Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġservice ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Service Ġ= Ġinstantiation Action . invoke () ĊĊĠĠĠĠĠĠĠ Ġregister Service ( tag , Ġnew Service ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew Service ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Or Register Service ( service Class : ĠClass < T >, Ġinstantiation Action : Ġ() Ġ-> ĠT ): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Or Register Service ( service Class . name , Ġinstantiation Action ) ĊĊĠĠĠ Ġfun Ġclear Registered Services () Ġ= Ġservices Map . clear () Ċ }