Sunteți pe pagina 1din 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 aplicaiei. Design patterns(sau proiectarea modelelor) sunt un un set de soluii ce pot fi aplicate la diverse probleme ce se ntlnesc frecvent n cadrul programrii orientate pe obiect. n teorie, aceste modele nu au legtur cu codul scris de un programator. Sunt nite soluii de eficientizare a problemelor des ntlnite, nite indicaii pe care programatorul trebuie s le transpun n limbajul de programare pe care l folosete. Ne vom referi n continuare la aceste modele legat de limbajul C#, modele care sunt evideniate mai bine totusi cu ajutorul programrii orientate pe obiect.

Singleton
Modelul Singleton este probabil cel mai simplu model. El este fcut pentru a permite accesul la o singur resurs care nu va fi niciodat duplicat, dar care trebuie fcut disponibil n orice moment al execuiei aplicaiei. Implementarea unui Singleton trebuie s satisfac cele dou condiii de acces global i instaniere singular a resursei respective. Are nevoie de un mecanism de acces la class Singleton fr a instania un obiect i un mecanism de a pstra informaia asupra resursei ce urmeaz a fi folosit. Astfel acest model poate fi cel mai uor implementat prin crearea unei clase ce va conine 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 instaniat n alt fel, constructorul este declarat protejat. Scurt despre Singleton: -Variabil global static -Se aloc automat, chiar dac nu va fi folosit -Iniializarea ntrziat este util n cazul n care obiectul folosete multe resurse -Instana nu se aloc dect n momentul utilizrii efective -Spre deosebire de varianta static, clasa Singleton se poate deriva

Structura

Pentru a crea model Singleton, trebuie sa retinem urmatoarele:

1. Sa se creeze o clasa publica (SingleTonSample)


public class SingleTonSample {}

2. Sa se defineasca constructorul acesteia ca fiind unul privat


private SingleTonSample() {}

3. Sa se creeze o instanta static privata a clasei( singleTonObject)


private volatile static SingleTonSample singleTonObject; 4.

Sa se scrie o metoda statica (InstanceCreation) care va fi folosita sa creeze o instanta a acestei clase si returneaza apelind metoda.

public static SingleTonSample InstanceCreation() { private static object lockingObject = new object(); if(singleTonObject == null) { lock (lockingObject) { if(singleTonObject == null) { singleTonObject = new SingleTonSample(); } } } return singleTonObject; }

Daca e sa analizam mai profund aceasta metoda, noi am creat o instanta a obiectului lockingObject, rolul caruia este sa permita doar un singur fir sa acceseze codul imbricat intr-un bloc inchis la timpul necesar. Deci, cind firul intra in aria inchisa, alte fire sunt nevoite sa astepte pina obiectul blocat se elibereaza, chiar si cind sunt mai multe threads incercind sa accese obiectul simultan, este pur si simplu imposibil. In continuare numai daca instanta statica a clasei este nula, se permite crearea a unei noi instante din aceasta clasa.

Prin urmare, doar un singur fir poate crea o instanta a acestei clase, deoarece odata ce instanta acestei clase a creat conditia a singleTonObject fiind nula si preia valoarea falsa, prin urmare restul instantelor li se vor atribui valoarea nula. 5. Sa se creeze o metoda publica in aceasta clasa, ca de exemplu pentru a afisa mesajul (DispalyMessage). Puteti realiza aceasta sarcina in felul urmator:
public void DisplayMessage() { Console.WriteLine("My First SingleTon Program"); }

6. Sa se creeze o alta clasa (Program)


class Program {}

7. Sa se creeze un punct de intrare pentru clasa de mai sus, avind o metoda numita Main.
static void Main(string[] args) { SingleTonSample singleton = SingleTonSample.InstanceCreation(); singleton.DisplayMessage(); Console.ReadLine(); }

Acum sa analizam aceasta constructie. Asa cum am creat o instanta SingleTon a clasei SingleTonSample apelind metoda statica SingleTonSample.InstanceCreation(), se creeaza un nou obiect, si prin urmare, apelind metoda singleton.DisplayMessage() se afiseaza mesajul My First SingleTon Program

AVANTAJE -Instance Control(Singleton previne copierea obiectelor a sine insusi)

-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. De fiecare data cind obiectul solicita o referinta, se verifica de asemenea fiecare data existenta acestei instante in clasa.) -Folosind un obiect Singleton(in special definita in ClassLibrary), programatorii trebuie sa retina ca ei nu pot folosi un nou cuvint cheie de instantiere a obiectului. Exista riscul ca programatorii sa nu aiba acces la codul sursa.