Documente Academic
Documente Profesional
Documente Cultură
Șabloane de Proiectare
Lucrare de laborator nr.3
Disciplina:Tehnici și mecanisme de proiectare software
Chișinău 2021
Scopul lucrării
Crearea unui program utilizînd șabloanele de proiectare Prototype și Abstract Factory la o singură
problem,care va gestiona necesitățile unei săli de sport.
Descrierea domeniului
Sportul este o activitate care poate influenta stilul de viată,sănătatea sau personalitatea unui om. Acesta este
singurul mod prin care poți fi cu adevărat sănătos, mai ales în combinație cu o alimentație și alte obiceiuri
sănătoase.Exită un șir de beneficii care prezintă necesitatea de a duce un mod sănătos de viață:
Astfel importanța sportului în viața tinerilor și a celor în vârstă este incontestabilă. Din păcate, multe
persoane uită de acest lucru ,nu au posibilitate și nu beneficiază de toate avantajele pe care activitatea fizică
le poate adduce din cauza pandemiei.
Problema identificata
În cadrul sălii sportive , avem nevoie de un sistem care să creeze seturi de obiecte pentru diferite tipuri de
vizitatori care la moment se împart în “Basic” și “Pro” . La moment o să introducem doar abonamente , dar
avem nevoie de o arhitectura care să ne permită , odata cu trecerea timpului și dezvoltarii sălii noastre
sportive să introducem și alte obiecte în aceste două categorii. Deasemenea , pentru obiectele precum
abonamentele care conțin date cu caracter personal , avem nevoie de o modalitate de a crea copii ale acestora
în caz de pierdere sau deteriorare .
Soluția – pentru a crea același tipuri de obiecte dar cu diferite specificații cum ar fi Abonamente – Pro și
Basic , iar mai apoi posibil echipament – pro și basic și altele , în ajutor ne vine șablonul de proiectare
Abstract Factory , care ne permite să creem familii(in cazul nostru “Basic” și “Pro”) de obiecte
asemanătoare(Abonamente , echipament , o lista cu facilitați...) . În cazul în care avem nevoie să creem copii
ale obiectelor , v-om folosi șablonul de proiectare Prototype.
Diagrame UML :
Diagramele care demonstrează implimentarea clasei ce reprezintă
1)Product & Prototype - EntityAbonament , care mosteneste de la IEntity
2)Concret Product & Concret Prototype - BasicAbonament si ProAbonament
IGetEntities.cs
public interface IGetEntities
{
public EntityAbonament GetNewAbonament(string owner);
}
EntityAbonament.cs
public abstract class EntityAbonament : IEntity
{
public Guid Id { get; set; }
public string Owner { get; set; }
public string AbonamentType { get; set; }
public DateTime ExpireDate { get; set; }
public abstract bool IsValid(DateTime dateTime);
BasicAbonament.cs
public class BasicAbonament : EntityAbonament
{
public BasicAbonament(string owner)
{
Owner = owner;
Id = Guid.NewGuid();
AbonamentType = "Basic";
ExpireDate = DateTime.Now.AddDays(30);
}
public override bool IsValid(DateTime dateTime)
{
if (dateTime < DateTime.Now)
return false;
return true;
}
public override IEntity Clone()
{
return MemberwiseClone() as IEntity;
}
}
ProAbonament.cs
public class ProAbonament : EntityAbonament
{
public ProAbonament(string owner)
{
Owner = owner;
Id = Guid.NewGuid();
AbonamentType = "Pro";
}
public override bool IsValid(DateTime dateTime)
{
return true;
}
GetBasicAbonament.cs
public class GetBasicAbonament : IGetEntities
{
public EntityAbonament GetNewAbonament(string owner)
{
return new BasicAbonament(owner);
}
}
GetProAbonament.cs
public class GetProAbonament : IGetEntities
{
public EntityAbonament GetNewAbonament(string owner)
{
return new ProAbonament(owner);
}
}
ClientService.cs
public class ClientService
{
public EntityAbonament GetEntity(IGetEntities getEntities, string owner)
{
return getEntities.GetNewAbonament(owner);
}
Program.cs
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine("Astazi avem promotie , o sa primiti 2 abonamente");
Console.WriteLine("unul <Basic> si unul <Pro>");
Concluzie :
In cadrul acestei lucrari de laborator am studiat și implementat în practică 2 sabloane de proiectare noi :
Abstract Factory și Prototype. Fiecare a fost conceput pentru a rezolva o anumită problemă. Abstract factory
putem să-l aplicam atunci cîndî în proiectul nostru avem nevoie să creem familii de obiecte noi , fară a
specifica clase concrete , iar Prototype ne vine în ajutor atunci cand avem nevoie sa creem copii ale unei
instanțe deja existente care poate să conține anumite date private , fara a neglija principiul encapsulării.