note 85081 added to language.oop5.patterns
| From: | shenkong@php.net | Date: | Thu, 14 Aug 2008 02:44:08 +0000 |
| Subject: | note 85081 added to language.oop5.patterns | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-143478@lists.php.net to get a copy of this message | ||
Strategy:
<?php
interface FlyBehavior {
public function fly();
}
interface QuackBehavior {
public function quack();
}
class FlyWithWings implements FlyBehavior {
public function fly() {
echo "I'm flying!!\n";
}
}
class FlyNoWay implements FlyBehavior {
public function fly() {
echo "I can't fly!\n";
}
}
class FlyRocketPowered implements FlyBehavior {
public function fly() {
echo "I'm flying with a rocket!\n";
}
}
class Qquack implements QuackBehavior {
public function quack() {
echo "Quack\n";
}
}
class Squeak implements QuackBehavior {
public function quack() {
echo "Squeak\n";
}
}
class MuteQuack implements QuackBehavior {
public function quack() {
echo "<< Silence >>\n";
}
}
abstract class Duck {
protected $quack_obj;
protected $fly_obj;
public abstract function display();
public function performQuack() {
$this->quack_obj->quack();
}
public function performFly() {
$this->fly_obj->fly();
}
public function swim() {
echo "All ducks float, even decoys!\n";
}
public function setFlyBehavior(FlyBehavior $fb) {
$this->fly_obj = $fb;
}
public function setQuackBehavior(QuackBehavior $qb) {
$this->quack_obj = $qb;
}
}
class ModelDuck extends Duck {
public function __construct() {
$this->fly_obj = new FlyNoWay();
$this->quack_obj = new MuteQuack();
}
public function display() {
echo "I'm a model duck!\n";
}
}
$model = new ModelDuck();
$model->performFly();
$model->performQuack();
$model->setFlyBehavior(new FlyRocketPowered());
$model->setQuackBehavior(new Squeak());
$model->performFly();
$model->performQuack();
?>
----
Server IP: 69.147.83.197
Probable Submitter: 219.133.62.73
----
Manual Page -- http://www.php.net/manual/en/language.oop5.patterns.php
Edit -- https://master.php.net/note/edit/85081
Del: integrated -- https://master.php.net/note/delete/85081/integrated
Del: useless -- https://master.php.net/note/delete/85081/useless
Del: bad code -- https://master.php.net/note/delete/85081/bad+code
Del: spam -- https://master.php.net/note/delete/85081/spam
Del: non-english -- https://master.php.net/note/delete/85081/non-english
Del: in docs -- https://master.php.net/note/delete/85081/in+docs
Del: other reasons-- https://master.php.net/note/delete/85081
Reject -- https://master.php.net/note/reject/85081
Search -- https://master.php.net/manage/user-notes.php