策略模式(Strategy Pattern):用PHP改写head first中的例子
策略模式(Strategy Pattern)定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户FlyBehavior 接口。定义飞行行为
<?php
interface FlyBehavior {
function fly();
}
?>
FlyWithWings类。实现了fly()方法。定义具体的飞行行为
<?php
class FlyWithWings implements FlyBehavior {
function fly() {
echo 'i am fly with wings!';
}
}
?>
FlyNoWay 类。实现了fly方法。定义具体的飞行行为
<?php
class FlyNoWay implements FlyBehavior {
function fly() {
echo 'i can not fly!';
}
}
?>
Quack 接口。定义叫声行为
<?php
interface Quack {
function quack();
}
?>
Squeak类。实现了quack()方法。定义具体的叫声方法。
<?php
class Squeak implements Quack {
function quack() {
echo 'Squeak, Squeak, Squeak!';
}
}
?>
FakeQuack 类。实现了quack()。
<?php
class FakeQuack implements Quack {
function quack(){
echo 'No sound!'';
}
}
?>
Duck类。为一抽象类。
<?php
abstract class Duck {
public $flyBehavior;
public $quack;
function performFly() {
$this->flyBehavior->fly();
}
function performQuack() {
$this->quack->quack();
}
abstract function display();
}
?>
具体的MallardDuck (野鸭)类。
<?php
include_once 'FlyBehavior.php';
include_once 'FlyWithWings.php';
include_once 'Quack.php';
include_once 'Squeak.php';
include_once 'Duck.php';
class MallardDuck extends Duck {
function MallardDuck() {
$this->flyBehavior = new FlyWithWings();
$this->quack = new Squeak();
}
function display() {
echo 'i am a real Mallard duck!';
}
}
$mallardDuck = new MallardDuck();
$mallardDuck->performFly();
$mallardDuck->performQuack();
$mallardDuck->display();
?>
页:
[1]