很多有关策略模式的例子都很单调,很理论化,不容易懂,使很多程序员望而却步。以下这个例子是从泡妞出发讲策略模式.
有些人泡妞很厉害,每天换女朋友,有些人不懂女人心,看着人家换女朋友,其实泡妞也要有策略的。
首先我们先写一个泡妞的类paoliu.php
- <?php
- /**
- * 泡妞策略V1.0版
- * email:hjwtp2005@qq.com
- * url:www.emtit.com
- */
- include 'strategy.php';
- include 'pola.php';
- include 'wenyou.php';
- include 'langman.php';
- include 'learn.php';
- class paoliu {
- private $strategy;//泡妞的策略
- /**
- * 传入具体的策略对像,按不同类型的女孩子选择不同的策略
- *
- * @param unknown_type $strategy
- * @return paoliu
- */
- public function paoliu($mm,$type=''){
- switch ($type){
- case "温柔":
- $this->strategy=new wenyou($mm);
- break;
- case "泼辣":
- $this->strategy=new pola($mm);
- break;
- case "浪漫":
- $this->strategy=new langman($mm);
- break;
- default:
- $this->strategy=new learn($mm);
- }
- }
- /**
- * 根据具体的策略对像,调用其泡妞方法
- *
- */
- public function actionInterface(){
- return $this->strategy->action();
- }
- }
- ?>
然后写一个泡妞策略的抽像类strategy.php
- <?php
- /**
- * 泡妞策略抽像类
- *
- */
- abstract class strategy {
- /**
- * 抽像的泡妞行动
- *
- */
- abstract public function action();
- }
- ?>
然后对每个不同类型的妞都写一个策略;
泼辣型pola.php
- <?php
- require_once ('strategy.php');
- class pola extends strategy {
- private $mm;
- public function pola($mm){
- $this->mm=$mm;
- }
- public function action(){
- echo $this->mm."是泼辣类型的,要感化她<br>";
- }
- }
- ?>
温柔型wenyou.php
- <?php
- require_once ('strategy.php');
- class wenyou extends strategy {
- private $mm;
- public function wenyou($mm){
- $this->mm=$mm;
- }
- public function action(){
- echo $this->mm."是温柔类型的,要关心她<br>";
- }
- }
- ?>
浪漫型langman.php
- <?php
- require_once ('strategy.php');
- class langman extends strategy {
- private $mm;
- /**
- * 初始化类型MM
- *
- * @param unknown_type $mm
- */
- public function langman($mm){
- $this->mm=$mm;
- }
- public function action(){
- echo $this->mm."浪漫类型的,带她去看日出!<br>";
- }
- }
- ?>
如果不知道什么类型呢?怎么办?也有一个策略
就是去学一种learn.php
- <?php
- require_once ('strategy.php');
- class learn extends strategy {
- private $mm;
- /**
- * 初始化类型MM
- *
- * @param unknown_type $mm
- */
- public function learn($mm){
- $this->mm=$mm;
- }
- public function action(){
- echo $this->mm."是什么类型的都不知道怎么泡呀?去www.emtit.com看一下吧!<br>";
- }
- }
- ?>
策略模式是一种定义一系列算法的方法,所有这些算法都是完成相同的工作(就像泡妞都是完成追女孩子的工作),只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用权用算法类之间的耦合。