// Ċ // Ġ ĠView . kt Ċ // Ġ ĠPure MVC ĠKotlin ĠMult ic ore Ċ // Ċ // Ġ ĠCopyright ( c ) Ġ 2 0 2 0 ĠS aad ĠSh ams Ġ< sa ad . sh ams @ pure mvc . org > Ċ // Ġ ĠYour Ġreuse Ġis Ġgoverned Ġby Ġthe ĠCreative ĠCommons ĠAt tribution Ġ 3 . 0 ĠLicense Ċ // Ċ Ċ package Ġorg . pure mvc . kotlin . mult ic ore . core Ċ Ċ import Ġorg . pure mvc . kotlin . mult ic ore . interfaces . IM edi ator Ċ import Ġorg . pure mvc . kotlin . mult ic ore . interfaces . IN ot ification Ċ import Ġorg . pure mvc . kotlin . mult ic ore . interfaces . I Observer Ċ import Ġorg . pure mvc . kotlin . mult ic ore . interfaces . I View Ċ import Ġorg . pure mvc . kotlin . mult ic ore . patterns . observer . Observer Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġ< P > A ĠMult iton Ġ< code > I View </ code > Ġimplementation .</ P > Ċ Ġ* Ċ Ġ* Ġ< P > In ĠPure MVC , Ġthe Ġ< code > View </ code > Ġclass Ġassumes Ġthese Ġrespons ibilities :</ P > Ċ Ġ* Ċ Ġ* Ġ< UL > Ċ Ġ* Ġ< LI > Maint ain Ġa Ġcache Ġof Ġ< code > IM edi ator </ code > Ġinstances .</ LI > Ċ Ġ* Ġ< LI > Provide Ġmethods Ġfor Ġregistering , Ġretrieving , Ġand Ġremoving Ġ< code > IM edi ators </ code >.</ LI > Ċ Ġ* Ġ< LI > Not ifi ying Ġ< code > IM edi ators </ code > Ġwhen Ġthey Ġare Ġregistered Ġor Ġremoved .</ LI > Ċ Ġ* Ġ< LI > Man aging Ġthe Ġobserver Ġlists Ġfor Ġeach Ġ< code > IN ot ification </ code > Ġin Ġthe Ġapplication .</ LI > Ċ Ġ* Ġ< LI > Pro viding Ġa Ġmethod Ġfor Ġatt aching Ġ< code > I Observer s </ code > Ġto Ġan Ġ< code > IN ot ification </ code >' s Ġobserver Ġlist .</ LI > Ċ Ġ* Ġ< LI > Pro viding Ġa Ġmethod Ġfor Ġbroadcast ing Ġan Ġ< code > IN ot ification </ code >.</ LI > Ċ Ġ* Ġ< LI > Notify ing Ġthe Ġ< code > I Observer s </ code > Ġof Ġa Ġgiven Ġ< code > IN ot ification </ code > Ġwhen Ġit Ġbroadcast .</ LI > Ċ Ġ* Ġ</ UL > Ċ Ġ* Ċ Ġ* Ġ@ see Ġorg . pure mvc . kotlin . mult ic ore . patterns . medi ator . Mediator ĠMed iator Ċ Ġ* Ġ@ see Ġorg . pure mvc . kotlin . mult ic ore . patterns . observer . Observer ĠObserver Ċ Ġ* Ġ@ see Ġorg . pure mvc . kotlin . mult ic ore . patterns . observer . Notification ĠNotification Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreates Ġa ĠView Ċ Ġ*/ Ċ Ċ open Ġclass ĠView ( key : ĠString ): ĠI View Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMessage ĠConstants ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ULT IT ON _ MSG Ġ= Ġ" View Ġinstance Ġfor Ġthis ĠMult iton Ġkey Ġalready Ġconstructed !" ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠMult iton ĠView Ġinstance Map . ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance Map Ġ= ĠConcurrent HashMap < String , ĠI View >() ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< P > View ĠSingleton ĠFactory Ġmethod .</ P > ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġmult iton Key ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġfactory Ġfactory Ġthat Ġreturns Ġ< code > I View </ code > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe ĠMult iton Ġinstance Ġof Ġ< code > View </ code > ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized Ġfun ĠgetInstance ( key : ĠString , Ġfactory : Ġ( key : ĠString ) Ġ-> ĠI View ): ĠI View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Map [ key ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Map [ key ] Ġ= Ġfactory ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Map [ key ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< P > Remove Ġan ĠI View Ġinstance </ P > ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġkey Ġof ĠI View Ġinstance Ġto Ġremove ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized Ġfun Ġremove View ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Map . remove ( key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThe ĠMult iton ĠKey Ġfor Ġthis ĠCore ĊĠĠĠ Ġprotected Ġvar Ġmult iton Key : ĠString ĊĊĠĠĠ Ġ// ĠMapping Ġof ĠMed iator Ġnames Ġto ĠMed iator Ġinstances ĊĠĠĠ Ġprotected Ġval Ġmedi ator Map Ġ= ĠConcurrent HashMap < String , ĠI Mediator >() ĊĊĠĠĠ Ġ// ĠMapping Ġof ĠNotification Ġnames Ġto ĠObserver Ġlists ĊĠĠĠ Ġprotected Ġval Ġobserver Map Ġ= ĠConcurrent HashMap < String , ĠMutable List < I Observer >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Constructor .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< P > This Ġ< code > I View </ code > Ġimplementation Ġis Ġa ĠMult iton , ĊĠĠĠĠ Ġ* Ġso Ġyou Ġshould Ġnot Ġcall Ġthe Ġconstructor ĊĠĠĠĠ Ġ* Ġdirectly , Ġbut Ġinstead Ġcall Ġthe Ġstatic ĠMult iton ĊĠĠĠĠ Ġ* ĠFactory Ġmethod Ġ< code > View . getInstance ( Ġmult iton Key Ġ) </ code ></ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġmult iton Key ĊĠĠĠĠ Ġ* Ġ@ throws ĠError ĠError Ġif Ġinstance Ġfor Ġthis ĠMult iton Ġkey Ġhas Ġalready Ġbeen Ġconstructed ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( instance Map . containsKey ( key )) Ġthrow ĠError ( MULT IT ON _ MSG ) ĊĠĠĠĠĠĠĠ Ġmult iton Key Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġinstance Map [ key ] Ġ= Ġthis ; ĊĠĠĠĠĠĠĠ Ġinitialize View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Initialize Ġthe ĠSingleton ĠView Ġinstance .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< P > Called Ġautomatically Ġby Ġthe Ġconstructor , Ġthis ĊĠĠĠĠ Ġ* Ġis Ġyour Ġopportunity Ġto Ġinitialize Ġthe ĠSingleton ĊĠĠĠĠ Ġ* Ġinstance Ġin Ġyour Ġsubclass Ġwithout Ġoverriding Ġthe ĊĠĠĠĠ Ġ* Ġconstructor .</ P > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinitialize View () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Register Ġan Ġ< code > I Observer </ code > Ġto Ġbe Ġnotified ĊĠĠĠĠ Ġ* Ġof Ġ< code > IN ot ifications </ code > Ġwith Ġa Ġgiven Ġname .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnotification Name Ġthe Ġname Ġof Ġthe Ġ< code > IN ot ifications </ code > Ġto Ġnotify Ġthis Ġ< code > I Observer </ code > Ġof ĊĠĠĠĠ Ġ* Ġ@ param Ġobserver Ġthe Ġ< code > I Observer </ code > Ġto Ġregister ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġregister Observer ( notification Name : ĠString , Ġobserver : ĠI Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( observer Map . containsKey ( notification Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Map [ notification Name ] !!. add ( observer ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Map [ notification Name ] Ġ= Ġmutable ListOf ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Notify Ġthe Ġ< code > I Observer s </ code > Ġfor Ġa Ġparticular Ġ< code > IN ot ification </ code >.</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< P > All Ġpreviously Ġattached Ġ< code > I Observer s </ code > Ġfor Ġthis Ġ< code > IN ot ification </ code >' s ĊĠĠĠĠ Ġ* Ġlist Ġare Ġnotified Ġand Ġare Ġpassed Ġa Ġreference Ġto Ġthe Ġ< code > IN ot ification </ code > Ġin ĊĠĠĠĠ Ġ* Ġthe Ġorder Ġin Ġwhich Ġthey Ġwere Ġregistered .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnotification Ġthe Ġ< code > IN ot ification </ code > Ġto Ġnotify Ġ< code > I Observer s </ code > Ġof . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġnotify Observer s ( notification : ĠIN ot ification ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserver Map [ notification . name ]?. let Ġ{ Ġob servers Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCopy Ġob servers Ġfrom Ġreference Ġarray Ġto Ġworking Ġarray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince Ġthe Ġreference Ġarray Ġmay Ġchange Ġduring Ġthe Ġnotification Ġloop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġob servers Ref Ġ= Ġob servers . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify ĠOb servers Ġfrom Ġthe Ġworking Ġarray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġob servers Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . notify Observer ( notification ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Remove Ġthe Ġobserver Ġfor Ġa Ġgiven Ġnotify Context Ġfrom Ġan Ġobserver Ġlist Ġfor Ġa Ġgiven ĠNotification Ġname .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnotification Name Ġwhich Ġobserver Ġlist Ġto Ġremove Ġfrom ĊĠĠĠĠ Ġ* Ġ@ param Ġnotify Context Ġremove Ġthe Ġobserver Ġwith Ġthis Ġobject Ġas Ġits Ġnotify Context ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove Observer ( notification Name : ĠString , Ġnotify Context : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġobserver Ġlist Ġfor Ġthe Ġnotification Ġunder Ġinspection ĊĠĠĠĠĠĠĠ Ġobserver Map [ notification Name ]?. let Ġ{ Ġob servers Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( observer . compare Notify Context ( notify Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthere Ġcan Ġonly Ġbe Ġone ĠObserver Ġfor Ġa Ġgiven Ġnotify Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġany Ġgiven ĠObserver Ġlist , Ġso Ġremove Ġit Ġand Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . remove ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlso , Ġwhen Ġa ĠNotification 's ĠObserver Ġlist Ġlength Ġfalls Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġzero , Ġdelete Ġthe Ġnotification Ġkey Ġfrom Ġthe Ġobserver Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ob servers . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Map . remove ( notification Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Register Ġan Ġ< code > IM edi ator </ code > Ġinstance Ġwith Ġthe Ġ< code > View </ code >.</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< P > Registers Ġthe Ġ< code > IM edi ator </ code > Ġso Ġthat Ġit Ġcan Ġbe Ġretrieved Ġby Ġname , ĊĠĠĠĠ Ġ* Ġand Ġfurther Ġinter rog ates Ġthe Ġ< code > IM edi ator </ code > Ġfor Ġits ĊĠĠĠĠ Ġ* Ġ< code > IN ot ification </ code > Ġinterest s .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< P > If Ġthe Ġ< code > IM edi ator </ code > Ġreturns Ġany Ġ< code > IN ot ification </ code > ĊĠĠĠĠ Ġ* Ġnames Ġto Ġbe Ġnotified Ġabout , Ġan Ġ< code > Observer </ code > Ġis Ġcreated Ġencaps ulating ĊĠĠĠĠ Ġ* Ġthe Ġ< code > IM edi ator </ code > Ġinstance 's Ġ< code > handle Notification </ code > Ġmethod ĊĠĠĠĠ Ġ* Ġand Ġregistering Ġit Ġas Ġan Ġ< code > Observer </ code > Ġfor Ġall Ġ< code > IN ot ifications </ code > Ġthe ĊĠĠĠĠ Ġ* Ġ< code > IM edi ator </ code > Ġis Ġinterested Ġin .</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmedi ator Ġa Ġreference Ġto Ġthe Ġ< code > IM edi ator </ code > Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġregister Mediator ( medi ator : ĠI Mediator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnot Ġallow Ġre - registration Ġ( you Ġmust Ġto Ġremove Mediator Ġf ist ) ĊĠĠĠĠĠĠĠ Ġif Ġ( medi ator Map . containsKey ( medi ator . name )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġmedi ator . initialize Notifier ( mult iton Key ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe ĠMed iator Ġfor Ġretrieval Ġby Ġname ĊĠĠĠĠĠĠĠ Ġmedi ator Map [ medi ator . name ] Ġ= Ġmedi ator ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet ĠNotification Ġinterest s , Ġif Ġany . ĊĠĠĠĠĠĠĠ Ġval Ġinterest s Ġ= Ġmedi ator . list Notification Inter ests () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister ĠMed iator Ġas Ġan Ġobserver Ġfor Ġeach Ġnotification Ġof Ġinterest s ĊĠĠĠĠĠĠĠ Ġif Ġ( interest s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠObserver Ġreferencing Ġthis Ġmedi ator 's Ġhandle Notification Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver ( medi ator :: handle Notification , ĠWeak Reference ( medi ator )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister ĠMed iator Ġas ĠObserver Ġfor Ġits Ġlist Ġof ĠNotification Ġinterest s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( notification Name Ġin Ġinterest s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Observer ( notification Name , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġalert Ġthe Ġmedi ator Ġthat Ġit Ġhas Ġbeen Ġregistered ĊĠĠĠĠĠĠĠ Ġmedi ator . on Register () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Retrieve Ġan Ġ< code > IM edi ator </ code > Ġfrom Ġthe Ġ< code > View </ code >.</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmedi ator Name Ġthe Ġname Ġof Ġthe Ġ< code > IM edi ator </ code > Ġinstance Ġto Ġretrieve . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ< code > IM edi ator </ code > Ġinstance Ġpreviously Ġregistered Ġwith Ġthe Ġgiven Ġ< code > medi ator Name </ code >. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġretrieve Mediator ( medi ator Name : ĠString ): ĠI Mediator ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmedi ator Map [ medi ator Name ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Check Ġif Ġa ĠMed iator Ġis Ġregistered Ġor Ġnot </ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmedi ator Name Ġmedi ator Ġname ĊĠĠĠĠ Ġ* Ġ@ return Ġwhether Ġa ĠMed iator Ġis Ġregistered Ġwith Ġthe Ġgiven Ġ< code > medi ator Name </ code >. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġhas Mediator ( medi ator Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmedi ator Map . containsKey ( medi ator Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ< P > Remove Ġan Ġ< code > IM edi ator </ code > Ġfrom Ġthe Ġ< code > View </ code >.</ P > ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmedi ator Name Ġname Ġof Ġthe Ġ< code > IM edi ator </ code > Ġinstance Ġto Ġbe Ġremoved . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ< code > IM edi ator </ code > Ġthat Ġwas Ġremoved Ġfrom Ġthe Ġ< code > View </ code > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove Mediator ( medi ator Name : ĠString ): ĠI Mediator ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmedi ator Map [ medi ator Name ]?. let Ġ{ Ġmedi ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġevery Ġnotification Ġthis Ġmedi ator Ġis Ġinterested Ġin ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterest s Ġ= Ġmedi ator . list Notification Inter ests () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( notification Name Ġin Ġinterest s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġthe Ġobserver Ġlinking Ġthe Ġmedi ator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġthe Ġnotification Ġinterest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( notification Name , Ġmedi ator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġthe Ġmedi ator Ġfrom Ġthe Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedi ator Map . remove ( medi ator Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalert Ġthe Ġmedi ator Ġthat Ġit Ġhas Ġbeen Ġremoved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedi ator . on Remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmedi ator ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }