note 85081 deleted from language.oop5.patterns by danbrown

From: Date: Sun, 23 Jan 2011 16:37:34 +0000
Subject: note 85081 deleted from language.oop5.patterns by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-176100@lists.php.net to get a copy of this message
Note Submitter: shenkong at php dot net ---- 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(); ?>

« previous php.notes (#176100) next »