设计模式之四——装饰模式

        昨天写了个策略模式,没看过的可以先看一下设计模式之三——策略模式(泡妞讲策略模式) ;但没有具体写怎么样去泡,既然知道了针对不同的类型用什么策略去泡,但到底怎么去实现呢?过程是怎么样呢?这就要用到装饰模式啦。

         装饰模式是为已有功能动态的添加更多功能的一种方式。当旧系统要增加功能时,用这个模式就可以很容易地在不修改原系统基础上加入新的功能。

 

先写一个泡妞者类paoliuer.php

  1. <?php
  2. class paoliuer {
  3.     private $name;
  4.     
  5.     public function __construct(){
  6.         
  7.     }
  8.     
  9.     public function setName($name){
  10.         $this->name=$name;
  11.     }
  12.     
  13.     public function action(){
  14.         echo "<br>这是{$this->name}的方法!";
  15.     }
  16. }
  17. ?>

然后写一个泡妞过程的类,选抽像一个泡妞过程的类吧,还不知道有什么泡妞办法呢

actions.php

 

  1. <?php
  2. require_once ('paoliuer.php');
  3. class actions extends paoliuer {
  4.     protected $actioner;
  5.     
  6.     
  7.     public function howToActions($actioner){
  8.         $this->actioner=$actioner;
  9.     }
  10.     
  11.     public function action(){
  12.         if ($this->actioner!=null){
  13.             $this->actioner->action(); 
  14.         }
  15.     }
  16. }
  17. ?>

一开始只知道送花这一种办法,好,先写一个送花类吧hua.php,有新的办法再加进去

  1. <?php
  2. require_once ('actions.php');
  3. class hua extends actions {
  4.     public function action(){
  5.         $this->oneAction();
  6.         $this->towAction();
  7.         echo '告诉MM这花是送给你的<br>';
  8.         $this->actioner->action();
  9.     }
  10.     
  11.     private function oneAction(){
  12.         echo "约MM到一个花园里<br>";
  13.     }
  14.     private function towAction(){
  15.         echo "带到一堆牛粪旁边,然后摘一朵,插到牛粪上<br>";
  16.     }
  17. }
  18. ?>

想想浪漫类型的女孩子喜欢看日落,增加一个看日落的类吧kanyuluo.php

  1. <?php
  2. require_once ('actions.php');
  3. class kanyuluo extends actions {
  4.     public function action(){
  5.         echo "<br>约MM去看日落,然后......<br>";
  6.         $this->actioner->action();
  7.     }
  8. }
  9. ?>

现在知道了这些办法了,好,测试一下怎么泡妞吧test.php

  1. <?php
  2. include 'paoliuer.php';
  3. include 'actions.php';
  4. include 'hua.php';
  5. include 'kanyuluo.php';
  6. $gg=new paoliuer();
  7. $gg->setName('周杰伦');
  8. echo("第一种方法<br>");
  9. //实例化各个装饰类,先想好泡妞要做什么操作
  10. $hua=new hua();
  11. $kanyuluo=new kanyuluo();
  12. //装饰过程,泡妞过程
  13. $hua->howToActions($gg);
  14. $kanyuluo->howToActions($hua);
  15. $kanyuluo->action();
  16. echo "<p>其实过程是灵活可变的,也可以这样</p>";
  17. $kanyuluo->howToActions($gg);
  18. $hua->howToActions($kanyuluo);
  19. $hua->action();
  20. ?>

由于本人不会泡妞,所以只能写两种办法出来,各位高手可以很容易在这个基础上增加功能。并且不会影响我所会的功能。呵呵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值