Documente Academic
Documente Profesional
Documente Cultură
Lab 6 IPP
Lab 6 IPP
RAPORT
Lucrare de laborator Nr.6
la IPP
A efectuat:
st.gr.TI-123
Cojocaru Eugeniu
A verificat:
Potlog M.
Chiinu 2015
Tema: Implementarea sabloanelor de proiectare Chain of responsibility, state,
strategy.
Permite un obiect s-i modifice comportamentul atunci cnd modificrile sale de stat interne.
Obiectul va aprea pentru a schimba clasa sa.
Utilizai modelul de stat n oricare dintre urmtoarele cauze:
Comportamentul unui obiect depinde de starea sa, i trebuie s se schimbe comportamentul
la run-time, n funcie de aceast stare.
Operaiuni au declaraii condiionale mari, din mai multe care depind de starea obiectului.
Aceast stare este, de obicei reprezentat de unul sau mai multe enumerate Constantele. De multe
ori, mai multe operaiuni va conine aceeai conditional structura. Modelul de stat pune fiecare
ramur a condiional ntr-o clas separat. Aceasta va permite sa trateze starea obiectului ca
obiect n ei drept propriu, care poate varia de independent de alte obiecte.
3. Strategy
Definitie:
Definii o familie de algoritmi, ngloba fiecare, i s le fac interschimbabile. Strategia permite
algoritmului variaz n mod independent de la clieni care l utilizeaz.
Utilizai modelul de strategie atunci cnd
Mai multe clase conexe difer numai n comportamentul lor. Strategii Furniza i un mod de a
configura o clasa cu unul din multe comportamente.
Ai nevoie de diferite variante de un algoritm. De exemplu, s-ar putea defini algoritmi reflect
diferite spatiu / timp de comer-offs.Strategies poate fi utilizat atunci cnd aceste variante sunt
puse n aplicare ca o ierarhie de clas algoritmi [HO87].
Un algoritm folosete date clienii nu trebuie s tii despre. Utilizai Strategia model pentru a
evita expunerea structuri de date complexe,-algoritm specific.
O clasa defineste multe comportamente, iar acestea apar ca multiplu condi ionat declaraii n
operaiunile sale. n loc de mai multe condiionale, film legate de ramuri conditionale n propria
lor clas strategie.
Concluzie:
In urma efectuarii acestei lucrari de laborator am studiat sabloanele de proiectare State, Stategy,
Chain of responsability. fiecare sablon se folosete n anumite conditii si specific cerinelor pe
care le avem. Am demonstrate utilizarea sabloanelor date n exemple concrete si eficiena lor.
Bibliografie:
1. Kevin Zhang Design Patterns 1994.
2. Miguel A. Castro .NET Design Pattern Framework 4.5 2015.
3. Data & Object Factory, LLC, http://www.dofactory.com/ (accesat la 11/2/2015)
Anexa A:
1. Abstrac Factory.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace abstract_factory
{
class AbstractFactory
{
class MainApp
{
Console.ReadKey();
}
}
}
public override Carnivore CreateCarnivore()
{
return new Wolf();
}
}
Console.WriteLine(this.GetType().Name +
" eats " + h.GetType().Name);
}
}
class AnimalWorld
{
private Herbivore _herbivore;
private Carnivore _carnivore;
// Constructor
public AnimalWorld(ContinentFactory factory)
{
_carnivore = factory.CreateCarnivore();
_herbivore = factory.CreateHerbivore();
}
public void RunFoodChain()
{
_carnivore.Eat(_herbivore);
}
}
}
}
2. Prototype
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace prototype
{
class Prototype
{
class MainApp
{
class ColorManager
{
private Dictionary<string, ColorPrototype> _colors =
new Dictionary<string, ColorPrototype>();
// Indexer
public ColorPrototype this[string key]
{
get { return _colors[key]; }
set { _colors.Add(key, value); }
}
}
}
}
3. Singleton
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Singleton
{
class Singleton
{
class MainApp
{
class LoadBalancer
{
private static LoadBalancer _instance;
_servers.Add("ServerI");
_servers.Add("ServerII");
_servers.Add("ServerIII");
_servers.Add("ServerIV");
_servers.Add("ServerV");
}
public static LoadBalancer GetLoadBalancer()
{
// Support multithreaded applications through
// 'Double checked locking' pattern which (once
// the instance exists) avoids locking each
// time the method is invoked
if (_instance == null)
{
lock (syncLock)
{
if (_instance == null)
{
_instance = new LoadBalancer();
}
}
}
return _instance;
}