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
|
//l interface est la pour faire plus propre (tu couples ton code par rapport à une interface et non par rapport à toutes les classes)
interface decorator{
public function myFunc();
}
class A implements decorator{
public $children;
public __construct($children){
$this -> children = $children
}
public function myFunc($a){
//Actions propres aux objets de la classe A
$a = 10 + $a;
return $this -> $children -> myFunc($a);
}
}
class B implements decorator{
public $children;
public __construct($children){
$this -> children = $children
}
public function myFunc($a){
//Actions propres aux objets de la classe B
$a = 100 + $a;
return $this -> $children -> myFunc($a);
}
}
class C implements decorator{
public $children;
public __construct($children){
$this -> children = $children
}
public function myFunc($a){
//Actions propres aux objets de la classe C
$a = 1000 + $a;
return $this -> $children -> myFunc($a);
}
}
class Initial {
public function myFunc($a){
//Actions propres aux objets de la classe A
return $a;
}
}
//utilisation
$objet = new C(new A(new Initial));
$objet->myFunc(5);// renvoie 1015
$objet = new B(new A(new Initial));
$objet->myFunc(5);// renvoie 115
$objet = new B(new B(new B(new Initial)));
$objet->myFunc(5);// renvoie 305
$objet = new C(new C(new A(new Initial)));
$objet->myFunc(5);// renvoie 2015 |
Partager