Šabloni opisuju način za rešavanja odgovarajućeg problema. Da li ćeš ih ti implementirati baš u izvornom obliku, prilagođeno tehnologiji koju koristiš ili potrebama same aplikacije, na tebi je. To bi bio odgovor na pitanje "da li je isto u asp.net-u i php-u".
Zanimljiv detalj kod Singletona je što koristi static instancu objekta (u svom izvornom obliku).
Obzirom da IIS ( i drugi, jeli) rade sa više niti( svaki posetilac će imati nit unutar istog servera) ako implementiraš Singleton doslovno, objekat koji on vraća neće biti na nivou jednog posetioca već na nivou svih posetilaca( jer je instanca static, pa je dostupna svima na nivou aplikacije).
Redak je slučaj kad će ti ovakvo ponašanje biti potrebno u web programiranju.
No, šablon se često prilagođava tako da odgovara onom što tebi treba. Na primer, želiš da ti neki objekat bude dostupan na nivou jednog zahteva( jednog posetioca sajta) ali da svaki posetilac ima zasebnu instancu tog objekta. To možeš uraditi tako što ćeš, umesto da držiš static instancu držati običnu instancu objekta čuvajući je, na primer, u HttpContext-u.
Evo primer gde sam koristio malo izmenjen singleton tako da mi, na nivou zahteva, upravlja LINQ-ovim DataContext-om:
Code:
public class DataProvider
{
private DataProvider()
{
}
public static CmsDataDc CmsDataContext()
{
if (HttpContext.Current.Items["cmsData"] == null)
HttpContext.Current.Items["cmsData"] = new CmsDataDc();
return (CmsDataDc)HttpContext.Current.Items["cmsData"];
}
public static void SubmitChanges()
{
CmsDataContext().SubmitChanges();
}
}