设计模式之三——策略模式(泡妞讲策略模式)

        很多有关策略模式的例子都很单调,很理论化,不容易懂,使很多程序员望而却步。以下这个例子是从泡妞出发讲策略模式.

        有些人泡妞很厉害,每天换女朋友,有些人不懂女人心,看着人家换女朋友,其实泡妞也要有策略的。

 

        首先我们先写一个泡妞的类paoliu.php

  1. <?php
  2. /**
  3.  * 泡妞策略V1.0版
  4.  * email:hjwtp2005@qq.com
  5.  * url:www.emtit.com
  6.  */
  7. include 'strategy.php';
  8. include 'pola.php';
  9. include 'wenyou.php';
  10. include 'langman.php';
  11. include 'learn.php';
  12. class paoliu {
  13.     private $strategy;//泡妞的策略
  14.     
  15.     /**
  16.      * 传入具体的策略对像,按不同类型的女孩子选择不同的策略
  17.      *
  18.      * @param unknown_type $strategy
  19.      * @return paoliu
  20.      */
  21.     public function paoliu($mm,$type=''){
  22.         switch ($type){
  23.             case "温柔":
  24.                 $this->strategy=new wenyou($mm);
  25.                 break;
  26.             case "泼辣":
  27.                 $this->strategy=new pola($mm);
  28.                 break;
  29.             case "浪漫":
  30.                 $this->strategy=new langman($mm);
  31.                 break;
  32.             default:
  33.                 $this->strategy=new learn($mm);
  34.         }
  35.     }
  36.     /**
  37.      * 根据具体的策略对像,调用其泡妞方法
  38.      *
  39.      */
  40.     public function actionInterface(){
  41.         return $this->strategy->action();
  42.     }
  43. }
  44. ?>

然后写一个泡妞策略的抽像类strategy.php

 

  1. <?php
  2. /**
  3.  * 泡妞策略抽像类
  4.  *
  5.  */
  6. abstract class strategy {
  7.  /**
  8.   * 抽像的泡妞行动
  9.   *
  10.   */
  11.  abstract public function action();
  12. }
  13. ?>

然后对每个不同类型的妞都写一个策略;

泼辣型pola.php

  1. <?php
  2. require_once ('strategy.php');
  3. class pola extends strategy {
  4.     private $mm;
  5.     public function pola($mm){
  6.         $this->mm=$mm;
  7.     }
  8.     public function action(){
  9.         echo $this->mm."是泼辣类型的,要感化她<br>";
  10.     }
  11. }
  12. ?>

温柔型wenyou.php

 

  1. <?php
  2. require_once ('strategy.php');
  3. class wenyou extends strategy {
  4.     private $mm;
  5.     public function wenyou($mm){
  6.         $this->mm=$mm;
  7.     }
  8.     public function action(){
  9.         echo $this->mm."是温柔类型的,要关心她<br>";
  10.     }
  11. }
  12. ?>

浪漫型langman.php

  1. <?php
  2. require_once ('strategy.php');
  3. class langman extends strategy {
  4.     private $mm;
  5.     /**
  6.      * 初始化类型MM
  7.      *
  8.      * @param unknown_type $mm
  9.      */
  10.     public function langman($mm){
  11.         $this->mm=$mm;
  12.     }
  13.     
  14.     public function action(){
  15.         echo $this->mm."浪漫类型的,带她去看日出!<br>";
  16.     }
  17. }
  18. ?>

如果不知道什么类型呢?怎么办?也有一个策略

就是去学一种learn.php

  1. <?php
  2. require_once ('strategy.php');
  3. class learn extends strategy {
  4.     private $mm;
  5.     /**
  6.      * 初始化类型MM
  7.      *
  8.      * @param unknown_type $mm
  9.      */
  10.     public function learn($mm){
  11.         $this->mm=$mm;
  12.     }
  13.     
  14.     public function action(){
  15.         echo $this->mm."是什么类型的都不知道怎么泡呀?去www.emtit.com看一下吧!<br>";
  16.     }
  17. }
  18. ?>

策略模式是一种定义一系列算法的方法,所有这些算法都是完成相同的工作(就像泡妞都是完成追女孩子的工作),只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用权用算法类之间的耦合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值