策略模式-鸭子怎么飞-实例
<?php //接口,鸭子飞的几种不同方式 的接口 interface FlyBehavior { public function fly(); } //方式一 class FlyWithWings implements FlyBehavior { public function fly() { echo "Fly With Wings \n"; } } //方式2 class FlyWithNo implements FlyBehavior { public function fly(){ echo "Fly With No Wings \n"; } } //鸭子类 //1、记录飞行方式 //2、做调用飞行功能的中间桥梁 class Duck { private $_flyBehavior; public function performFly() { $this->_flyBehavior->fly();//2、做调用飞行功能的中间桥梁 } public function setFlyBehavior(FlyBehavior $behavior) { $this->_flyBehavior = $behavior;//1、记录飞行方式 } } class RubberDuck extends Duck { } // Test Case $duck = new RubberDuck(); /* 想让鸭子用翅膀飞行 */ $duck->setFlyBehavior(new FlyWithWings()); $duck->performFly(); /* 想让鸭子不用翅膀飞行 */ $duck->setFlyBehavior(new FlyWithNo()); $duck->performFly();