策略模式(Strategy Pattern):用PHP改写head first中的例子

本文介绍策略模式的概念,并通过PHP代码实现了一个具体的应用案例。案例中定义了不同的飞行和叫声行为接口及其实现类,展示了如何将这些行为封装并应用于抽象的Duck类中,使得不同类型的鸭子可以表现出不同的飞行和叫声行为。

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

策略模式(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();

?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值