用php来实现书中的示例和习题,昨天完成策略模式和观察者模式,代码如下:
<?php
interface FlyBehavior
{
function fly();
}
interface QuackBehavior
{
function quack();
}
class FlyWithWings implements FlyBehavior
{
public function fly()
{
print("fly with wings\n");
}
}
class FlyNoWay implements FlyBehavior
{
public function fly()
{
print("fly no way\n");
}
}
class Quack implements QuackBehavior
{
public function quack()
{
print("quack,gua,gua\n");
}
}
abstract class Duck
{
protected $flyBehavior = null;
protected $quackBehaviro = null;
public function __construct(FlyBehavior $flyBehavior = null, QuackBehavior $quackBehavior = null)
{
$this->setFlyBehavior($flyBehavior);
$this->setQuackBehavior($quackBehavior);
}
public function fly()
{
$this->flyBehavior->fly();
}
public function quack()
{
$this->quackBehavior->quack();
}
public function getFlyBehavior()
{
return $flyBehavior;
}
public function setFlyBehavior(FlyBehavior $fly)
{
$this->flyBehavior = $fly;
}
public function getQuackBehavior()
{
return $quackBehavior;
}
public function setQuackBehavior(QuackBehavior $quack)
{
$this->quackBehavior = $quack;
}
abstract public function display();
}
class RedheadDuck extends Duck
{
public function __construct(FlyBehavior $flyBehavior = null, QuackBehavior $quackBehavior = null)
{
parent::__construct($flyBehavior, $quackBehavior);
}
public function display()
{
print("damn it! RedheadDuck display()\n");
}
}
$duck = new RedheadDuck();
$duck->setFlyBehavior(new FlyWithWings());
$duck->setQuackBehavior(new Quack());
$duck->fly();
$duck->quack();
$duck->display();
?>
interface FlyBehavior
{
function fly();
}
interface QuackBehavior
{
function quack();
}
class FlyWithWings implements FlyBehavior
{
public function fly()
{
print("fly with wings\n");
}
}
class FlyNoWay implements FlyBehavior
{
public function fly()
{
print("fly no way\n");
}
}
class Quack implements QuackBehavior
{
public function quack()
{
print("quack,gua,gua\n");
}
}
abstract class Duck
{
protected $flyBehavior = null;
protected $quackBehaviro = null;
public function __construct(FlyBehavior $flyBehavior = null, QuackBehavior $quackBehavior = null)
{
$this->setFlyBehavior($flyBehavior);
$this->setQuackBehavior($quackBehavior);
}
public function fly()
{
$this->flyBehavior->fly();
}
public function quack()
{
$this->quackBehavior->quack();
}
public function getFlyBehavior()
{
return $flyBehavior;
}
public function setFlyBehavior(FlyBehavior $fly)
{
$this->flyBehavior = $fly;
}
public function getQuackBehavior()
{
return $quackBehavior;
}
public function setQuackBehavior(QuackBehavior $quack)
{
$this->quackBehavior = $quack;
}
abstract public function display();
}
class RedheadDuck extends Duck
{
public function __construct(FlyBehavior $flyBehavior = null, QuackBehavior $quackBehavior = null)
{
parent::__construct($flyBehavior, $quackBehavior);
}
public function display()
{
print("damn it! RedheadDuck display()\n");
}
}
$duck = new RedheadDuck();
$duck->setFlyBehavior(new FlyWithWings());
$duck->setQuackBehavior(new Quack());
$duck->fly();
$duck->quack();
$duck->display();
?>