Sunteți pe pagina 1din 5

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Departamentul Ingineria Software și Automatică

RAPORT

Lucrare de laborator Nr.5

Disciplina: Tehnici și mecanisme de proiectare software

Tema: Companie mass-media

A efectuat: st.gr.TI-181,
Erhan Serghei

A verificat : Scrob Sergiu

Chișinău 2021
Sarcina lucrării:
Crearea unui program utilizând șabloanele de proiectare Composite și Decorator, care va gestiona
necesitățile unei companii mass-media.

Descrierea problemei identificate:


Problema propusă spre rezolvare este adaptarea noilor produse conform tipurilor de categorii ale
companiei, crearea sistemului pentru adăugarea la costul produsului prețul opțiunilor adiționale pe care
clientul le va alege.

Diagrama UML:

Figura 1 Diagrama UML

Codul Sursa:

namespace Modem
{
abstract class DeviceCategory
{
protected string name;

public DeviceCategory(string name)


{
this.name = name;
}

public abstract void Speed(int speed);


public abstract void Add(DeviceCategory c);
public abstract void Remove(DeviceCategory c);
}

namespace Modem
{
abstract class Device : DeviceCategory
{
protected double DevicePrice;
public Device(string name, double cost) : base(name)
{
this.DevicePrice = cost;
}

public override void Speed(int speed)


{
Console.WriteLine(new string(' ', speed) + name);
}

public override void Add(DeviceCategory component)


{
throw new NotImplementedException();
}

public override void Remove(DeviceCategory component)


{
throw new NotImplementedException();
}
public abstract double GetPrice();
}

namespace Modem
{
class WifiDevice : DeviceCategory
{
List<DeviceCategory> children = new List<DeviceCategory>();

public WifiDevice(string name) : base(name)


{ }

public override void Add(DeviceCategory device)


{
children.Add(device);
}

public override void Remove(DeviceCategory device)


{
children.Remove(device);
}
public override void Speed(int speed)
{
Console.WriteLine(new string(' ', speed) + name);

foreach (DeviceCategory component in children)


{
component.Speed(speed + 2);
}
}
}

namespace Modem
{
class Modem : Device
{

public Modem(string name, double price) : base(name, price)


{
this.DevicePrice = price;
}
public override double GetPrice()
{
return DevicePrice;
}
}

namespace Modem
{
abstract class Additionally : Device

{
protected Device Device;
public Additionally(string name, double price, Device device) : base(name, price)
{
this.Device = device;
}

public abstract override double GetPrice();


}

namespace Modem
{
class Abonament : Additionally
{
public Abonament(string name, double price, Device device) : base(name, price, device)
{ }
public override double GetPrice()
{
var FinalPrice = Device.GetPrice() + 1;
return FinalPrice;
}
}
}

namespace Modem
{
class Program
{
static void Main(string[] args)
{
DeviceCategory category = new WifiDevice("Wifi device");
DeviceCategory Modems = new WifiDevice("Modem");
DeviceCategory ModemHuawei = new WifiDevice("Modemuri Huawei");
Device ModemAirbox = new Modem("Modem AirBox 4G Huawei E5576 – 322", 999);
ModemHuawei = new Abonament("Modem AirBox 4G Huawei E5576 – 322", 200, ModemAirbox);

WifiDevice.Add(Modems);
Modems.Add(ModemHuawei);
ModemHuawei.Add(ModemAirbox);
WifiDevice.Speed(0);
Console.WriteLine("\nModem AirBox 4G Huawei E5576 – 322: " + ModemAirbox.GetPrice());
Console.ReadLine();
}
}
}

Rezultatul execuției programului:

Figura 2 Rezultatul execuției

Concluzie:
În urma elaborării acestei lucrări de laborator s-au studiat pattern-ul Composite și Decorator, cazurile
când trebuie de folosit aceste șabloane și s-a rezolvat o problemă din domeniul unei companii mass-media
folosind șabloanele enumerate. Pentru rezolvarea problemei cu adaptarea noilor produse conform tipurilor
de categorii s-a folosit șablonul Composite pentru a permite clienților să acceseze obiecte individuale și
grupuri de obiecte în același mod, iar pentru rezolvarea problemei cu setarea prețului ce include prețul
produsului și opțiunilor selectate de client s-a folosit Decorator pentru a adăuga la obiectul nostru produs
o comportare dinamică.

S-ar putea să vă placă și