package Ġexploration . design Patterns . behavior al . chain Of Respons ibility Model ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠChen J in X in Ġon Ġ 2 0 2 1 / 7 / 9 Ġä¸Ĭ åįĪ 1 0 : 3 2 Ċ Ġ*/ Ċ Ċ class ĠPartial Function < in ĠP 1 , Ġout ĠR >( private Ġval Ġdefin et At : Ġ( P 1 ) Ġ-> ĠBoolean , Ġprivate Ġval Ġf : Ġ( P 1 ) Ġ-> ĠR ) Ġ: Ġ( P 1 ) Ġ-> ĠR Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠP 1 ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( def inet At ( p 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġf ( p 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Value : ($ p 1 ) Ġisn 't Ġsupported Ġby Ġthis Ġfunction ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Defined At ( p 1 : ĠP 1 ) Ġ= Ġdefin et At ( p 1 ) Ċ } Ċ Ċ infix Ġfun Ġ< P 1 , ĠR > ĠPartial Function < P 1 , ĠR >. orElse ( that : ĠPartial Function < P 1 , ĠR >): ĠPartial Function < P 1 , ĠR > Ġ{ ĊĠĠĠ Ġreturn ĠPartial Function ({ Ġthis . isDefined At ( it ) Ġ|| Ġthat . isDefined At ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isDefined At ( it ) Ġ-> Ġthis ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthat ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġgroup Leader Ġ= Ġ{ ĊĠĠĠ Ġval Ġdefin et At : Ġ( Apply Event ) Ġ-> ĠBoolean Ġ= Ġ{ Ġit . money Ġ<= Ġ 2 0 0 Ġ} ĊĠĠĠ Ġval Ġhandler : Ġ( Apply Event ) Ġ-> ĠUnit Ġ= Ġ{ Ġprintln (" Group ĠLeader Ġhandled Ġapplication : Ġ${ it . title }") Ġ} ĊĠĠĠ ĠPartial Function ( def inet At , Ġhandler ) Ċ }() Ċ Ċ val Ġpres ident Ġ= Ġ{ ĊĠĠĠ Ġval Ġdefin et At : Ġ( Apply Event ) Ġ-> ĠBoolean Ġ= Ġ{ Ġit . money Ġ<= Ġ 5 0 0 Ġ} ĊĠĠĠ Ġval Ġhandler : Ġ( Apply Event ) Ġ-> ĠUnit Ġ= Ġ{ Ġprintln (" Pres ident Ġhandled Ġapplication : Ġ${ it . title }") Ġ} ĊĠĠĠ ĠPartial Function ( def inet At , Ġhandler ) Ċ }() Ċ Ċ val Ġcol lege Ġ= Ġ{ ĊĠĠĠ Ġval Ġdefin et At : Ġ( Apply Event ) Ġ-> ĠBoolean Ġ= Ġ{ Ġtrue Ġ} ĊĠĠĠ Ġval Ġhandler : Ġ( Apply Event ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . money Ġ> Ġ 1 0 0 0 Ġ-> Ġprintln (" Col lege : ĠThis Ġapplication Ġis Ġrefused .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprintln (" Col lege Ġhandled Ġapplication : Ġ${ it . title }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠPartial Function ( def inet At , Ġhandler ) Ċ }() Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġapply Chain Ġ= Ġgroup Leader Ġor Else Ġpres ident Ġor Else Ġcol lege ĊĠĠĠ Ġapply Chain ( Apply Event ( 1 0 ," bug Ġa Ġpen ")) ĊĠĠĠ Ġapply Chain ( Apply Event ( 2 0 0 ," team Ġbuilding ")) ĊĠĠĠ Ġapply Chain ( Apply Event ( 3 9 9 ," team Ġbuilding Ġtoo ")) ĊĠĠĠ Ġapply Chain ( Apply Event ( 6 0 0 ," hold Ġa Ġdeb ate Ġmatch ")) ĊĠĠĠ Ġapply Chain ( Apply Event ( 1 2 0 0 ," ann ual Ġmeeting Ġof Ġthe Ġcol lege ")) Ċ }