package Ġio . kom mon s . design patterns . extension objects Ċ Ċ open Ġclass ĠUnit ( var Ġname : ĠString ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġunit Extension : ĠUnit Extension ? Ġ= Ġnull ĊĊĠĠĠ Ġopen Ġfun Ġget Unit Extension ( extension Name : ĠString ): ĠUnit Extension ? Ġ= Ġnull Ċ } Ċ Ċ class ĠSol dier Unit ( name : ĠString ): ĠUnit ( name ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Unit Extension ( extension Name : ĠString ): ĠUnit Extension ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( extension Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Soldier Extension " Ġ-> Ġunit Extension Ġ?: ĠSol dier ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġsuper . get Unit Extension ( extension Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSer ge ant Unit ( name : ĠString ): ĠUnit ( name ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Unit Extension ( extension Name : ĠString ): ĠUnit Extension ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( extension Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ser ge ant Extension " Ġ-> Ġunit Extension Ġ?: ĠSer ge ant ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġsuper . get Unit Extension ( extension Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCommand er Unit ( name : ĠString ): ĠUnit ( name ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Unit Extension ( extension Name : ĠString ): ĠUnit Extension ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( extension Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Command er Extension " Ġ-> Ġunit Extension Ġ?: ĠCommand er ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġsuper . get Unit Extension ( extension Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }