<?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();