设计模式之PHP项目应用(策略模式:自动驾驶系统)

1 前言 关于策略模式的定义,模式组成,模式核心思想,模式架构图,程序架构等基础知识介绍。请先参考我的另外一篇博客《(三)设计模式之PHP项目应用(策略模式:商场收银系统)》:。2 项目应用2.1 需求说明 某公司是福特和本田公司的金牌合作伙伴,现要求开发一套自动驾驶系统,只要汽车上安装该系统就可以实现无人驾驶,只用实现启动,转弯,停止功能即可。该系统可以在福特和本田车上使用。这两个品牌的汽车使用该系统就能实现自动驾驶,并且系统能够很好的移植到其他汽车上(来之《网络》)2.2 需求分析 按照需求,可以将自动驾驶所有的操作设计成为一个接口算法,,本田,福特,吉普等需要应用自动驾驶系统的汽车,都继承这个接口,实现不同的策略算法。然后设计自动驾驶环境类,去维护汽车的实例。2.3 设计架构图

2.4 程序源码下载 2.5 程序说明

1)strategy.php

<?php/** * strategy.php * * 策略类 * * Copyright (c) 2015 * * modification history: * ——————– * 2015/5/14, by CleverCode, Create * */// 定义自动驾驶汽车能够实现的操作interface ICar{// 启动public function run();// 停止public function stop();// 转弯public function turn();}// 本田汽车class HondaCar implements ICar{/*** 启动** @return void*/public function run(){echo "本田车启动了!\r\n";}/*** 转弯** @return void*/public function turn(){echo "本田车拐弯了!\r\n";}/*** 停止** @return void*/public function stop(){echo "本田车停止了!\r\n";}}// 福特汽车class FordCar implements ICar{/*** 启动** @return void*/public function run(){echo "福特车启动了!\r\n";}/*** 转弯** @return void*/public function turn(){echo "福特车拐弯了!\r\n";}/*** 停止** @return void*/public function stop(){echo "福特车停止了!\r\n";}}// 吉普汽车class JeepCar implements ICar{/*** 启动** @return void*/public function run(){echo "吉普车启动了!\r\n";}/*** 转弯** @return void*/public function turn(){echo "吉普车拐弯了!\r\n";}/*** 停止** @return void*/public function stop(){echo "吉普车停止了!\r\n";}}2)strategyPattern.php<?php/** * strategyPattern.php * * 设计模式:策略模式 * * Copyright (c) 2015 * * modification history: * ——————– * 2015/5/14, by CleverCode, Create * */// 加载所有的策略include_once ('strategy.php');// 创建一个环境类,根据不同的需求调用不同策略class AutoSystem{// 策略private $_car = null;/*** 构造函数** @param string $type 类型* @return void*/public function __construct($type = null){if (!isset($type)) {return;}$this->setCar($type);}/*** 设置策略(简单工厂与策略模式配合使用)** @param string $type 类型* @return void*/public function setCar($type){$cs = null;switch ($type) {// 本田汽车case 'Honda' :$cs = new HondaCar();break;// 福特汽车case 'Ford' :$cs = new FordCar();break;// 吉普汽车case 'Jeep' :$cs = new JeepCar();break;}$this->_car = $cs;}/*** 启动汽车** @return void*/public function runCar(){$this->_car->run();}/*** 转弯汽车** @return void*/public function turnCar(){$this->_car->turn();}/*** 停止汽车** @return void*/public function stopCar(){$this->_car->stop();}}/* * 客户端类 * 让客户端和业务逻辑尽可能的分离,降低客户端和业务逻辑算法的耦合, * 使业务逻辑的算法更具有可移植性 */class Client{public function main(){$autoSystem = new AutoSystem();// 选择汽车应用自动驾驶系统$autoSystem->setCar('Honda');$autoSystem->runCar();$autoSystem->turnCar();$autoSystem->stopCar();$autoSystem->setCar('Ford');$autoSystem->runCar();$autoSystem->turnCar();$autoSystem->stopCar();$autoSystem->setCar('Jeep');$autoSystem->runCar();$autoSystem->turnCar();$autoSystem->stopCar();}}/** * 程序入口 */function start(){$client = new Client();$client->main();}start();?>3 总结1) 在strategy.php与strategyPattern.php中。如果需要扩展多的汽车应用自动驾驶系统,只需要继承ICar接口实现更多的类,这里与简单工厂模式结合使用。是程序更清晰。 2) 这也是典型的依赖倒置原则的体现。现在AutoSystem系统依赖于ICar 这个抽象,而与具体的实现细节HondaCar、FordCar、JeepCar无关,所以实现细节的变化不会影响AutoSystem。对于实现细节只要实现ICar 即可,即实现细节依赖于ICar 抽象。

3)依赖倒置原则:A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。B.抽象不应该依赖于具体,具体应该依赖于抽象。

版权声明:

2)原创地址:(转载务必注明该地址)。

3)欢迎大家关注我博客更多的精彩内容:。

梦想让我与众不同,奋斗让我改变命运!

设计模式之PHP项目应用(策略模式:自动驾驶系统)

相关文章:

你感兴趣的文章:

标签云: