策略模式(Strategy Pattern)

本文通过PHP实例深入解析策略模式,运用抽象鸭子类和具体鸭子类(如野鸭、红头鸭、橡皮鸭)来展示策略模式在实际编程中的应用。详细介绍了鸭子类的构造、行为属性设定、以及各鸭子类的特性展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度词条的解释

http://baike.baidu.com/view/2141079.htm

<?php
//策略模式
//抽象鸭子类
abstract class Duck {
	private $duckName;
	private $flyBehavior;
	private $quackBehavior;
	public function __set($key, $value) {
		$this->$key = $value;
	}
	public function __get($key) {
		if(isset($this->$key)) {
			return $this->$key;
		} else {
			return NULL;
		}
	}
	public function swim() {
		return '鸭子都会游泳';
	}
	public function performFly() {
		return $this->flyBehavior->fly();
	}
	public function performQuack() {
		return $this->quackBehavior->quack();
	}
	public function setFlyBehavior(IFlyBehavior $flyBehavior) {
		$this->flyBehavior = $flyBehavior;
	}
	public function setQuackBehavior(IQuackBehavior $quackBehavior) {
		$this->quackBehavior = $quackBehavior;
	}
	public abstract function display();
}

//野鸭类
class MallardDuck extends Duck {
	public function __construct() {
		parent::setQuackBehavior(new QuackA());
		parent::setFlyBehavior(new FlyWithWings());
	}

	public function display() {
		return "我是一只野鸭子";
	}
}

//红头鸭子类
class RedHeadDuck extends Duck {
	public function __construct() {
		parent::setQuackBehavior(new QuackB());
		parent::setFlyBehavior(new FlyWithWings());
	}

	public function display() {
		return "我是一只红头鸭";
	}
}

//橡皮鸭子类
class RubberDuck extends Duck {
	public function __construct() {
		parent::setQuackBehavior(new QuackC());
		parent::setFlyBehavior(new FlyNoWay());
	}

	public function display() {
		return "我是一个橡皮鸭子";
	}
}

//飞行方式接口
interface IFlyBehavior {
	function fly();
}

//飞起来
class FlyWithWings implements IFlyBehavior {
	public function fly() {
		return '我飞了!';
	}
}

//飞不了
class FlyNoWay implements IFlyBehavior {
	public function fly() {
		return '飞不起来!';
	}
}

//叫
interface IQuackBehavior {
	function quack();
}

//叫方式A
class QuackA implements IQuackBehavior {
	function quack() {
		return '哑哑';
	}
}

//叫方式B
class QuackB implements IQuackBehavior {
	function quack() {
		return '嘎嘎';
	}
}

//叫方式C
class QuackC implements IQuackBehavior {
	function quack() {
		return '吱吱';
	}
}

//野鸭
$mallardDuck = new MallardDuck();
echo $mallardDuck->display();
//野鸭在飞
echo $mallardDuck->performFly();
//野鸭在叫
echo $mallardDuck->performQuack();
echo '<br/>';

//红头鸭子
$redHeadDuck = new RedHeadDuck();
echo $redHeadDuck->display();
echo $redHeadDuck->performFly();
echo $redHeadDuck->performQuack();
echo '<br/>';

//橡皮鸭子
$rubberDuck = new RubberDuck();
echo $rubberDuck->display();
echo $rubberDuck->performFly();
echo $rubberDuck->performQuack();
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值