Html-, css- és php-help
  • Jim Morrison
    #22531
    Egy kis design pattern féleségben kellene egy kis konzultáció :)

    (Próbáltam valamennyire értelmes példát összehozni, remélem sikerült valamennyire.)

    A problémám az, hogy van rengeteg Állatnévvel rendelkező osztály (Dog, Lion, Cat, stb stb). Mindegyiknek egy metódusa van, mindegyik egy picit mást csinál, a lényeg az, hogy mindegyik egy tömböt ad vissza objektumokkal. Az, hogy mely osztályokat vegyük elő, a Zoo osztály példányosításakor dől el a példában, a lényeg az, hogy ez kapja meg, mely állat osztályokat kell meghívni és milyen paraméterekkel. Ami fontos, hogy mindegyiknek hozzá kell férnie egy bizonyos wordlisthez. Ez egy több száz, ezer tagból is állható tömb. Előre meg van határozva, hogy melyik állat melyiket kapja meg (példában vagy a magyar, vagy angol wordlistet kap).
    A kérdésem: Mi lenne a leghatékonyabb módja, hogy ha 200 osztály van (Dog, Cat, Snake, ...), és mindegyiket meghívjuk 9-10 különböző paraméterrel, és az általuk visszaadott tömböket kell feldolgoznunk, akkor ennek mi lenne a leghatékonyabb/leggyorsabb megoldása? Mikor a visszakapott tömböt visszakapjuk, azt is tudnunk kell, hogy milyen paraméterrel hívtuk meg (példában lábak száma)
    Magát a wordListet biztosan nem éri meg minden egyes osztálynak 'leküldeni'. Az általuk visszaadott tömböt meg mindegyiknél ugyanúgy kell feldolgozni.

    WordListből nincs sok, csak a tartalmuk jelentős.

    Próba kód:
    SPOILER! Kattints ide a szöveg elolvasásához!


    <?php

    class Zoo {
    protected $pool = [];

    public function __construct($temp, $legs, $animal)
    {
    // Külön vannak
    // Test: pool feltöltése példához
    $this->pool[] = new AnimalFactory(['magyar', 'szavak'], [4, 3], 'Dog');
    $this->pool[] = new AnimalFactory(['magyar', 'szavak'], 2, 'Dog');
    $this->pool[] = new AnimalFactory(['english', 'words'], $legs, $animal);
    }

    public function start() {
    foreach($this->pool as $animalPool)
    {
    $tmp = $animalPool->start();
    $this->kiir($tmp);
    }
    }

    public function kiir($value) {
    var_dump($value);
    }
    }

    class AnimalFactory {
    private $wordList;
    private $legs;
    private $animal;

    private $obj;

    // Wordlist és lábak száma
    public function __construct($wordList, $legs, $animal) {
    $this->legs = $legs;
    $this->animal = $animal;
    $className = $animal;
    $this->obj = new $className($wordList, $legs);
    }

    public function start(){
    $value = $this->obj->test();
    return [
    'legs' => $this->legs,
    'value' => $value
    ];
    }
    }

    class Animal {
    protected $wordList;

    public function __construct($wordList) {
    $this->wordList = $wordList;
    }
    }

    class Dog extends Animal implements AnimalInterface {
    public function test() {
    return $this->wordList[0] . ' Dog-';
    }
    }

    class Lion extends Animal implements AnimalInterface {
    public function test() {
    return $this->wordList[0] . ' Lion-';
    }
    }

    // Csak egy interface
    interface AnimalInterface {
    public function test();
    }


    // Teszteljük le
    $baba = new Zoo('asd', 3, 'Lion');
    $baba->start();




    // Itt gyorsan kipróbálhatjátok