-
Notifications
You must be signed in to change notification settings - Fork 0
/
strategy.php
83 lines (69 loc) · 1.92 KB
/
strategy.php
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
abstract class Duck {
private $flyable;
private $quackable;
public function __construct(FlyableStrategy $flyable, Quackable $quackable)
{
$this->flyable = $flyable;
$this->quackable = $quackable;
}
public function fly () {$this->flyable->fly();}
public function quack () {$this->quackable->quack();}
public function swim() { /*make some stuff*/ }
abstract public function display();
}
class MallardDuck extends Duck {
public function display() { /*display Mallard Duck*/ }
}
class ReadHeadDuck extends Duck {
public function display() { /*display Mallard Duck*/ }
}
class RubberDuck extends Duck {
public function display() { /*display rubber duck */ }
}
class DecoyDuck extends Duck {
public function display() {/*display DecoyDuck*/}
}
$concreteDuck = new ReadHeadDuck(
new FlyWithWings(),
new LiveDuckQuack()
);
$concreteDuck->fly();
$decoyDuck = new DecoyDuck(
new FlyNoWay(),
new Squeak(),
);
$decoyDuck->fly();
/*-------------------------------------------------------------------------*/
interface FlyableStrategy {
public function fly();
}
// has a -> composition
// is a -> inheritance
class FlyWithWings implements FlyableStrategy {
public function fly() { echo 'i believe i can fly!'; }
}
class FlyNoWay implements FlyableStrategy {
public function fly() { echo "i can't fly!"; }
}
interface Quackable {
public function quack();
}
class LiveDuckQuack implements Quackable {
public function quack() { echo 'quack-quack'; }
}
class Squeak implements Quackable {
public function quack() { echo 'squeak-squeak'; }
}
class Muted implements Quackable {
public function quack() { echo 'no sound'; }
}
abstract class Animal {
abstract public function makeSound();
}
class Cat extends Animal {
public function makeSound() { echo 'Meow'; }
}
class Dog extends Animal {
public function makeSound() { echo 'Bark'; }
}