Design Patterns

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Backend / full stack PHP developer met ervaring

Backend / full stack PHP developer met ervaring Wie wij zoeken Wij zoeken een ervaren PHP backend / full stack developerdie zelfstandig en gestructureerd werkt. Wat doen wij? Alflex Technologies ontwikkelt en produceert maatwerkelektronica (hardware en embedded software), mobiele apps, web- en PC-applicaties voor een hele brede markt (BtB). Unieke producten met functies als legionellabestrijding, corrosiebestrijding, smart building/ lightning, (medicijn)verpakkingsmachines, sensoring en nog veel meer. Deze producten worden steeds vaker voorzien van connectiviteit met behulp van LoRa, NB-IoT, LTE-M en zijn daarmee verbonden met het Internet (IoT). Dit stelt weer extra eisen op het gebied van dataverzameling, -ontsluiting en -presentatie

Bekijk vacature »

Leander ---

Leander ---

24/03/2011 12:04:45
Quote Anchor link
Ik ben bezig om grip te krijgen op Design Patterns. Het lukt niet helemaal, dus vandaar dat ik hier op PHPHulp even een topic aan heb gemaakt. Om het voor me zelf duidelijk te maken, heb ik eerst een kleine omschrijving gemaakt van hoe het Decorator pattern werkt (daar ben ik op dit moment mee bezig).

Quote:
Het decorator patroon is een ontwerppatroon dat gebruikt wordt om functionaliteiten toe te voegen aan objecten. Dit is beter uit te leggen aan de hand van een UML diagram.

http://upload.wikimedia.org/wikipedia/commons/4/41/Decorator.GIF

AbcComponent is in dit geval de abstracte klasse die er voor zorgt dat iedereen die deze klasse extends, de functie Operation() moet implementeren. ComponentA en AbcDecorator extenden de hoofdklasse, AbcComponent, om invulling te geven in dit functie.

AbcDecorator heeft dat weer 2 subklasses onder zich die zorgen voor een extra stukje functionaliteit. Het kan zo zijn dat in het ene geval de klasse DecoratorA gebruikt wordt, en in het andere geval DecoratorB. Dit zorgt er dus voor dat er in beide gevallen er iets anders getoond/gedaan wordt.


Zit ik een beetje op de goede weg, of ben ik nog te oppervlakkig bezig? Ik ben al een hele tijd aan het zoeken en uitspitten, maar ik krijg de link niet helemaal goed.

(Waarom Decorator? Dat is nodig voor wat ik wil gaan maken (ja onderzocht)).

Ik ben ook nog bezig met Abstract Factory. Is het mogelijk om die te combineren met het Decorator pattern (en dat weer gecombineerd met het MVC model?)
Gewijzigd op 24/03/2011 12:05:44 door Leander ---
 
PHP hulp

PHP hulp

03/03/2021 03:35:27
 
Remco nvt

Remco nvt

24/03/2011 13:35:37
Quote Anchor link
Goed boek: http://my.safaribooksonline.com/book/software-engineering-and-development/patterns/0596007124

en dan in hoofdstuk 3 wordt decerator uitgelegd ;)
 
Leander ---

Leander ---

25/03/2011 13:23:25
Quote Anchor link
Bedankt, maar ik heb al een soortgelijk boek tot m'n beschikking. Ik wou alleen even peilen of ik een beetje op de goede weg zat en het decorator pattern begrijp.

Zit ik dus een beetje op de goede weg? Of begrijp ik het hele patroon verkeerd?
Gewijzigd op 25/03/2011 13:23:45 door Leander ---
 
Remco nvt

Remco nvt

25/03/2011 14:19:57
Quote Anchor link
Je bent op de goede weg :) De UML klopt.
Heb even wat PHP toegevoegd voor een uitwerking ;)

index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include ('Beverage.class.php');
$drink = new Expresso();
$drink = new Mocha($drink);
$drink = new Sugar($drink);
echo 'Beschrijving : ' . $drink->getDescription();
echo '<br>';
echo 'Euro : '. $drink->cost();
echo '<br><br>';
$drink = new Expresso();
echo 'Beschrijving : ' . $drink->getDescription();
echo '<br>';
echo 'Euro : '. $drink->cost();
?>


Beverage.class.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php

abstract class Beverage {

    public $description = 'unknown';

    public function getDescription() {
        return $this->description;
    }


    public abstract function cost();
}


abstract class CondimentDecorator extends Beverage {
    public function getDescription() {
        parent::getDescription();
    }
}


class Expresso extends Beverage {

    public function  __construct() {
        $this->description = 'Expresso';
    }


    public function cost() {
        return 2;
    }
}


class Mocha extends CondimentDecorator {
    private $beverage;

    public function  __construct(Beverage $b) {
        $this->beverage = $b;
    }


    public function  getDescription() {
        return $this->beverage->getDescription() . ', Mocha';
    }


    public function cost() {
        return $this->beverage->cost() + 0.10;
    }
}


class Sugar extends CondimentDecorator {
    private $beverage;

    public function  __construct(Beverage $b) {
        $this->beverage = $b;
    }


    public function  getDescription() {
        return $this->beverage->getDescription() . ', Sugar';
    }


    public function cost() {
        return $this->beverage->cost() + 0.70;
    }
}

?>


Uitwerking:
Quote:
Beschrijving : Expresso, Mocha, Sugar
Euro : 2.8

Beschrijving : Expresso
Euro : 2


Had geen zin om alle classes in aparte bestanden te zetten ;)
Gewijzigd op 25/03/2011 14:21:38 door Remco nvt
 
Pim -

Pim -

25/03/2011 17:37:42
Quote Anchor link
eSpresso? ;)
Je kan CondimentDecorator ook nog een constructor geven.

Heb je hier toevallig nog een leuk voorbeeld 'in real life' van?
 
Remco nvt

Remco nvt

25/03/2011 19:06:57
Quote Anchor link
mmmh, dat is een slordigheidje inderdaad die typefout.

Je kan denken aan een kassa systeem om inderdaad toevoegingen.
De JAVA I/O stream implementation is een decorator pattern.
Of het gebruiken voor je gegevens aan te passen. Dus je string o.i.d.
 
Leander ---

Leander ---

27/03/2011 18:48:58
Quote Anchor link
De UML is trouwens niet van mij, ik gebruikte hem enkel om te kijken of ik het Decorator patroon een beetje snapte.

Voor de rest, bedankt van je PHP voorbeeld code. Helpt zeker wel om het beter te begrijpen. Ik zal het even goed gaan bestuderen.
 
Anny php

anny php

28/04/2011 12:21:34
Quote Anchor link
Bedankt voor het delen van de mooie tutorial.
Sommige gratis php design patterns scripts die je kunt bekijken op de pagina:
http://www.phpkode.com/scripts/category/php-design-patterns/
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.