You are on page 1of 4

Un punct de reper pentru a descoperi un programator bun, indiferent de limbajul de programare pe care îl utilizează, este abilitatea acestuia de a aplica

tehnici cunoscute de design al aplicaţiei. Design patterns(sau proiectarea modelelor) sunt un un set de soluţii ce pot fi aplicate la diverse probleme ce se întâlnesc frecvent în cadrul programării orientate pe obiect. În teorie, aceste modele nu au legătură cu codul scris de un programator. Sunt niște soluţii de eficientizare a problemelor des întâlnite, nişte indicaţii pe care programatorul trebuie să le transpună în limbajul de programare pe care îl foloseşte. Ne vom referi în continuare la aceste modele legat de limbajul C#, modele care sunt evidenţiate mai bine totusi cu ajutorul programării orientate pe obiect.

Singleton
Modelul Singleton este probabil cel mai simplu model. El este făcut pentru a permite accesul la o singură resursă care nu va fi niciodată duplicată, dar care trebuie făcută disponibilă în orice moment al execuţiei aplicaţiei. Implementarea unui Singleton trebuie să satisfacă cele două condiţii de acces global şi instanţiere singulară a resursei respective. Are nevoie de un mecanism de acces la class Singleton fără a instanţia un obiect şi un mecanism de a păstra informaţia asupra resursei ce urmează a fi folosită. Astfel acest model poate fi cel mai uşor implementat prin crearea unei clase ce va conţine o metodă care va crea o nouă instanţă a clasei, dacă aceasta nu exista deja, iar dacă există o va returna pe aceasta. Pentru a fi siguri că acea clasă nu va fi instanţiată în alt fel, constructorul este declarat protejat. Scurt despre Singleton: -Variabilă globală statică -Se alocă automat, chiar dacă nu va fi folosită -Iniţializarea întârziată este utilă în cazul în care obiectul foloseşte multe resurse -Instanţa nu se alocă decât în momentul utilizării efective -Spre deosebire de varianta statică, clasa Singleton se poate deriva

Structura

se permite crearea a unei noi instante din aceasta clasa. Sa se creeze o clasa publica (SingleTonSample) public class SingleTonSample {} 2. chiar si cind sunt mai multe threads incercind sa accese obiectul simultan. public static SingleTonSample InstanceCreation() { private static object lockingObject = new object(). Sa se creeze o instanta static privata a clasei( singleTonObject) private volatile static SingleTonSample singleTonObject. rolul caruia este sa permita doar un singur fir sa acceseze codul imbricat intr-un bloc inchis la timpul necesar. alte fire sunt nevoite sa astepte pina obiectul blocat se elibereaza. 4.Pentru a crea model Singleton. } Daca e sa analizam mai profund aceasta metoda. cind firul intra in aria inchisa. Deci. } } } return singleTonObject. noi am creat o instanta a obiectului lockingObject. Sa se scrie o metoda statica (InstanceCreation) care va fi folosita sa creeze o instanta a acestei clase si returneaza apelind metoda. trebuie sa retinem urmatoarele: 1. este pur si simplu imposibil. In continuare numai daca instanta statica a clasei este nula. Sa se defineasca constructorul acesteia ca fiind unul privat private SingleTonSample() {} 3. . if(singleTonObject == null) { lock (lockingObject) { if(singleTonObject == null) { singleTonObject = new SingleTonSample().

Puteti realiza aceasta sarcina in felul urmator: public void DisplayMessage() { Console.InstanceCreation(). Sa se creeze o alta clasa (Program) class Program {} 7.WriteLine("My First SingleTon Program"). apelind metoda singleton. } Acum sa analizam aceasta constructie. prin urmare restul instantelor li se vor atribui valoarea nula.ReadLine(). deoarece odata ce instanta acestei clase a creat conditia a singleTonObject fiind nula si preia valoarea falsa. } 6. Console. ca de exemplu pentru a afisa mesajul (DispalyMessage). Asa cum am creat o instanta SingleTon a clasei SingleTonSample apelind metoda statica SingleTonSample.Prin urmare.InstanceCreation(). doar un singur fir poate crea o instanta a acestei clase. Sa se creeze un punct de intrare pentru clasa de mai sus.DisplayMessage() se afiseaza mesajul “My First SingleTon Program” AVANTAJE -Instance Control(Singleton previne copierea obiectelor a sine insusi) . static void Main(string[] args) { SingleTonSample singleton = SingleTonSample. 5. si prin urmare. avind o metoda numita Main. singleton. se creeaza un nou obiect.DisplayMessage(). Sa se creeze o metoda publica in aceasta clasa.

-Flexibilitate(Deoarece clasa controleaza procesul de instantiere. clasa poseda o flexibilitate sa schimbe insasi procesul de instantiere) DEZAVANTAJE -Supraincarcare(Cu toate ca cantitatea e mica sunt unele supraincarcari implicate in verificare. se verifica de asemenea fiecare data existenta acestei instante in clasa. .) -Folosind un obiect Singleton(in special definita in ClassLibrary). Exista riscul ca programatorii sa nu aiba acces la codul sursa. De fiecare data cind obiectul solicita o referinta. programatorii trebuie sa retina ca ei nu pot folosi un nou cuvint cheie de instantiere a obiectului.