您的位置:首页 > 编程语言 > PHP开发

PHP设计模式之——策略模式

2016-07-18 11:09 633 查看
策略模式(Strategy Pattern)是对象的行为模式,是对一组算法的抽象封装,动态的选择算法使用。在我们的日常生活中,策略模式体现在方方面面:早上起床我去公司,可以坐公交,可以坐出租车,也可以步行,最终的目的都是到达公司,但是却使用了不同的资源。

策略模式的三个角色:

抽象策略角色
具体策略角色
环境角色(对抽象策略角色的引用)
策略模式的实现步骤:

定义抽象角色(类)或抽象方法(接口)(定义好各个实现的共同抽象方法)
定义具体策略类(实现父类的共同方法)
定义环境角色类(私有化声明抽象角色变量,重载构造方法,执行抽象方法)
策略模式的示例代码:

<?php
/**
* 策略模式
* */

interface wayToSchool {
//定义抽象策略
public function way();
}

class wayWithCar implements wayToSchool {
//定义坐车去学校的具体策略
public function way() {
echo "goes to school by CAR!\n";
}
}

class wayWithBicycle implements wayToSchool {
//定义骑车去学校的具体策略
public function way() {
echo "goes to school by BICYCLE!\n";
}
}

class wayWithWalk implements wayToSchool {
//定义步行去学校的具体策略
public function way() {
echo "goes to school by WALK!\n";
}
}

class Student {
//定义环境角色类(学生)
private $_wayToSchool;
private $_name;

public function __construct($name) {
$this->_name = $name;
}

public function performance() {
echo $this->_name, " ";
$this->_wayToSchool->way();
}

public function setWayToSchool(wayToSchool $_way) {
$this->_wayToSchool = $_way;
}
}

$jerry = new Student("jerry");
$tom = new Student("tom");
$eggsy = new Student("eggsy");

//实现不同策略
$jerry->setWayToSchool(new wayWithCar);
$jerry->performance();

$tom->setWayToSchool(new wayWithBicycle);
$tom->performance();

$eggsy->setWayToSchool(new wayWithWalk);
$eggsy->performance();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: