algorytm.org

Implementacja w Php

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Fabryka abstrakcyjna (abstract factory) - Implementacja w Php
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
Nadesłany przez Piotr Synowiec, 29 kwietnia 2017 14:58
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

AbstractFactory.php:
<?php

// Implementacja przykladu fabryki abstrakcyjnej
// www.algorytm.org
//-------------------------------------------------------------------------------------FABRYKA_CZESCI
interface FabrykaPodzespolowKomputerowych 
{
    public function produkujemyDysk();
    public function produkujemyGrafike();
    public function produkujemyRam();
    public function produkujemyProcesor();
    public function produkujemyChlodzenie();
}

//----------------------------------------------------------------------------------------DYSK_TWARDY
interface Dysk 
{
    public function dawajDysk();
}

class DyskDlaPC implements Dysk 
{
    private $name = "DyskDlaPC";
    public function dawajDysk()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new DyskDlaPC();
    }
}

class DyskDlaLaptopa implements Dysk 
{
    private $name = "DyskDlaLaptopa";
    public function dawajDysk() 
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new DyskDlaLaptopa();
    }
}

//------------------------------------------------------------------------------------KARTA_GRAFICZNA
interface Grafika 
{
    public function dawajGrafike();
}
 
class GrafikaDlaPC implements Grafika 
{
    private $name = "GrafikaDlaPC";
    public function dawajGrafike()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new GrafikaDlaPC();
    }
}
 
class GrafikaDlaLaptopa implements Grafika 
{
    private $name = "GrafikaDlaLaptopa";
    public function dawajGrafike()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new GrafikaDlaLaptopa();
    }
}

//-----------------------------------------------------------------------------------------PAMIEC_RAM
interface Ram 
{
    public function dawajRam();
}
 
class DDR3 implements Ram 
{
    private $name = "DDR3";
    public function dawajRam()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new DDR3();
    }
}
 
class DDR2 implements Ram 
{
    private $name = "DDR2";
    public function dawajRam()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new DDR2();
    }
}

//-------------------------------------------------------------------------------------------PROCESOR
interface Procesor 
{
    public function dawajProcesor();
}
 
class ProcesorDlaPC implements Procesor 
{
    private $name = "ProcesorDlaPC";
    public function dawajProcesor()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new ProcesorDlaPC();
    }
}
 
class ProcesorDlaLaptopa implements Procesor 
{
    private $name = "ProcesorDlaLaptopa";
    public function dawajProcesor()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new ProcesorDlaLaptopa();
    }
}

//-----------------------------------------------------------------------------------------CHLODZENIE
interface Chlodzenie 
{
    public function dawajChlodzenie();
}
 
class ChlodzenieDlaLaptopa implements Chlodzenie
{
    private $name = "ChlodzenieDlaLaptopa";
    public function dawajChlodzenie()
    {
        print("Dodaje: " . $this->name . PHP_EOL);
        return new ChlodzenieDlaLaptopa();
    }
}

//---------------------------------------------------------------------------------------CZESCI_DO_PC
class FabrykaPodzespolowPC implements FabrykaPodzespolowKomputerowych 
{
    public function produkujemyDysk()
    {
        return new DyskDlaPC();
    }
 
    public function produkujemyGrafike()
    {
        return new GrafikaDlaPC();
    }
 
    public function produkujemyRam()
    {
        return new DDR3();
    }
 
    public function produkujemyProcesor()
    {
        return new ProcesorDlaPC();
    }
 
    public function produkujemyChlodzenie()
    {
        return null;
    }
}

//------------------------------------------------------------------------------------CZESCI_DO_LAPKA
class FabrykaPodzespolowLaptop implements FabrykaPodzespolowKomputerowych
{
    public function produkujemyDysk()
    {
        return new DyskDlaLaptopa();
    }
 
    public function produkujemyGrafike()
    {
        return new GrafikaDlaLaptopa();
    }
 
    public function produkujemyRam()
    {
        return new DDR2();
    }

    public function produkujemyProcesor()
    {
        return new ProcesorDlaLaptopa();
    }

    public function produkujemyChlodzenie()
    {
        return new ChlodzenieDlaLaptopa();
    }
}

//-------------------------------------------------------------------------------ABSTRAKCYJNY_PRODUKT
abstract class Komputer 
{
    protected $dysk;
    protected $grafika;
    protected $ram;
    protected $procesor;
    protected $chlodzenie;

    public abstract function skladanie();

    public function instalowanieOprogramowania()
    {
        print("Instaluje oprogramowanie..." . PHP_EOL);
    }

    public function pakowanie()
    {
        print("Pakuje sprzet..." . PHP_EOL);
    }
    
    public function sprzedawanie()
    {
        print("Sprzedaje sprzet..." . PHP_EOL);
    }
}

//-------------------------------------------------------------------------------------TUTAJ_SKLADAMY
class FabrykaKomputerow 
{
    public function wydajKomputer($model)
    {
        $komputer = $this->zlozKomputer($model);
        $komputer->instalowanieOprogramowania();
        $komputer->pakowanie();
        $komputer->sprzedawanie();
        return $komputer;
    }

    protected function zlozKomputer($model)
    {
        $komputer = null;
        if(strtoupper($model) == "PC") {
            $komputer =  new KomputerPC(new FabrykaPodzespolowPC());
        } else if(strtoupper($model) == "LAPTOP") {
            $komputer = new Laptop(new FabrykaPodzespolowLaptop());
        }
        return $komputer;
    }
}

//-------------------------------------------------------------------------------------------------PC
class KomputerPC extends Komputer 
{
    private  $fabrykaPodzespolowKomputerowych;
 
    public function KomputerPC($fabryka)
    {
        $this->fabrykaPodzespolowKomputerowych = $fabryka;
        $this->skladanie();
    }

    public function skladanie()
    {
        $this->dysk = $this->fabrykaPodzespolowKomputerowych->produkujemyDysk()->dawajDysk();
        $this->grafika = $this->fabrykaPodzespolowKomputerowych->produkujemyGrafike()->dawajGrafike();
        $this->procesor = $this->fabrykaPodzespolowKomputerowych->produkujemyProcesor()->dawajProcesor();
        $this->ram = $this->fabrykaPodzespolowKomputerowych->produkujemyRam()->dawajRam();
    }
}

//----------------------------------------------------------------------------------------------LAPEK
class Laptop extends Komputer 
{
    private $fabrykaPodzespolowLaptop;
 
    public function Laptop($fabryka)
    {
        $this->fabrykaPodzespolowLaptop = $fabryka;
        $this->skladanie();
    }
 
    public function skladanie()
    {
        $this->dysk = $this->fabrykaPodzespolowLaptop->produkujemyDysk()->dawajDysk();
        $this->grafika = $this->fabrykaPodzespolowLaptop->produkujemyGrafike()->dawajGrafike();
        $this->procesor = $this->fabrykaPodzespolowLaptop->produkujemyProcesor()->dawajProcesor();
        $this->ram = $this->fabrykaPodzespolowLaptop->produkujemyRam()->dawajRam();
        $this->chlodzenie = $this->fabrykaPodzespolowLaptop->produkujemyChlodzenie()->dawajChlodzenie();
    }
}

//-----------------------------------------------------------------------------------------------MAIN

$fabrykaKomputerow = new FabrykaKomputerow();
print("PC" . PHP_EOL);
$pc = $fabrykaKomputerow->wydajKomputer("PC");
print(PHP_EOL . "LAPTOP" . PHP_EOL);
$laptop = $fabrykaKomputerow->wydajKomputer("Laptop");
Dodaj komentarz