`
zhangchibang
  • 浏览: 346262 次
社区版块
存档分类
最新评论

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

?>

 

分享到:
评论

相关推荐

    HeadFirst策略模式

    在《HeadFirst策略模式》中,作者通过生动有趣的例子和直观的视觉呈现,帮助读者深入理解这一模式,并提供了C++实现的示例代码,便于实践和学习。阅读本书,你可以更好地掌握如何在实际项目中运用策略模式,提高代码...

    策略模式 Strategy Pattern

    ### 策略模式 Strategy Pattern #### 概述 策略模式是一种行为设计模式,它使得算法可以在运行时被更改。这种模式允许一个类的行为或其算法在运行时根据需要进行改变,通过这种方式,我们可以轻松地扩展不同的算法...

    [行为模式] head first 设计模式之策略模式(strategy)

    在《Head First 设计模式》这本书中,策略模式被用来演示如何在不修改原有代码的情况下,通过改变执行策略来改变对象的行为。例如,我们可以创建一个`SortStrategy`接口,包含`sort()`方法,然后定义不同的排序策略...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    head first 设计模式 策略模式 C++ 代码

    在《Head First 设计模式》这本书中,策略模式被详细地讲解,并通过C++代码实现来加深理解。策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这使得算法的变化独立于使用算法的...

    Head first C++策略设计模式

    综上所述,这个压缩包提供的“Head First C++策略设计模式”示例,不仅教你如何在C++中实现策略模式,还通过类图帮助你理解面向对象设计中的一个重要概念。通过学习这个案例,你可以更好地掌握如何在实际项目中运用...

    Head First设计模式 源代码

    《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂、生动的方式讲解了23种经典的设计模式。源代码是书中理论知识的实践体现,可以帮助读者更深入地理解并应用这些模式。这里我们将围绕这些...

    HeadFirst 设计模式学习笔记1--策略模式Demo

    在HeadFirst的《设计模式》一书中,作者以通俗易懂的方式介绍了各种设计模式,包括策略模式,适合初学者和有经验的开发者深入理解设计模式的原理和应用。通过阅读这本书,我们可以更好地掌握如何在实际项目中灵活...

    设计模式源码Head_First_DesignPattern_src

    在本文中,我们将深入探讨设计模式的核心概念,并结合"Head First DesignPattern_src"中的源码,详细解析一些关键的设计模式。 1. 单例模式(Singleton): 单例模式确保一个类只有一个实例,并提供全局访问点。在...

    设计模式之策略模式(Strategy Pattern)

    在策略模式中,有三个主要角色:策略接口(Strategy Interface)、具体策略类(Concrete Strategy Classes)和上下文(Context)。策略接口定义了所有支持的算法的公共接口,这样上下文就可以通过这个接口来调用这些...

    Head First Design Patterns 英文版 Head First设计模式

    《Head First Design Patterns》不仅传授了具体的设计模式,还特别强调了如何将多个设计模式结合起来创造出新的模式,例如在第12章中,作者介绍了MVC(Model-View-Controller)模式,这是一种广泛应用于软件开发中的...

    Head First 之策略模式源码

    《Head First 之策略模式源码》是一份深入解析策略模式的编程学习资源,它以Head First系列的易懂风格,结合源代码实例,帮助读者理解并掌握这一设计模式。策略模式是软件工程中的一种行为设计模式,它使你能在运行...

    Head first 设计模式 第一章 策略模式 pdf + 源代码

    在《Head First设计模式》的第一章中,作者可能通过生动的示例和易于理解的图表,解释了如何在实际问题中识别策略模式的应用场景,以及如何有效地实现和使用这个模式。书中可能涵盖了以下内容: - 策略模式的基本...

    Head First Design Pattern

    3. 行为型设计模式:例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态...

    head first策略者模式

    在《Head First 策略者模式》中,作者通过生动有趣的例子,比如“鸭子模拟器”,详细解释了如何使用策略者模式。在这个例子中,有不同种类的鸭子,每种鸭子都有自己的叫声、游泳方式和摆动翅膀的方式。这些行为可以...

    head first设计模式学习代码

    我们来看"DesignPattern"这个目录,它可能包含了23种常见的设计模式示例代码,如单例模式、工厂模式、抽象工厂模式、建造者模式、装饰器模式、适配器模式、桥接模式、组合模式、享元模式、代理模式、命令模式、职责...

Global site tag (gtag.js) - Google Analytics