php中的设计模式---装饰模式

阅读更多

装饰模式

 

所谓装饰模式就是让程序一层一层的包下来, 像是大口袋套小口袋。

 

例:

 

 

[php]  view plain copy
  1. class 食物{  
  2.  var $des='食物';  
  3.  var $cost;  
  4.  function getdes(){  
  5.  return $this->des;  
  6.  }  
  7.  function getcost(){  
  8.  return $this->cost;  
  9.  }  
  10. }  
  11. //被装饰者类  
  12. class 米饭 extends 食物{  
  13.  var $des="米饭";  
  14.  var $cost=0.44;  
  15. }  
  16. //装饰者类与被装饰者继承自同一个基类  
  17. class 菜 extends 食物{  
  18.  var $obj;  
  19.  var $des='';  
  20.  var $cost;  
  21. }  
  22. //细分的装饰者  
  23. class 炒土豆丝 extends 菜{  
  24.  var $obj;  
  25.  var $des='土豆丝';  
  26.  var $cost=0.10;  
  27.  function __construct($obj){  
  28.  $this->obj=$obj;  
  29.  }  
  30.  function getdes(){  
  31.  return $this->obj->getdes().$this->des;  
  32.  }  
  33.  function getcost(){  
  34.  return $this->obj->getcost()+$this->cost;  
  35.  }  
  36. }  
  37. //有一个细分的装饰者  
  38. class 咸菜 extends 菜{  
  39.  var $obj;  
  40.  var $des='咸菜';  
  41.  var $cost=0.10;  
  42.  function __construct($obj){  
  43.  $this->obj=$obj;  
  44.  }  
  45.  function getdes(){  
  46.  return $this->obj->getdes().$this->des;  
  47.  }  
  48.  function getcost(){  
  49.  return $this->obj->getcost()+$this->cost;  
  50.  }  
  51. }  
  52. //更多的菜  
  53. ......  
  54. //测试代码  
  55. $午饭= new 米饭();  
  56. $午饭=new 土豆丝($午饭);  
  57. $午饭=new 咸菜($午饭);  
  58. echo $午饭->getdes();//outputs 米饭土豆丝咸菜  
  59. echo $午饭->getcost();//outputs 0.64  
  60. ?>  

 

 

 

首先必须保证一个基类,所有的子类都继承了基类的方法,并给出自己特有的定义!

然后层层嵌套,调用上一级的对象,形成嵌套的规则!即时一个装饰模式。

主要用在一些层层嵌套的规则中!

你可能感兴趣的:(php中的设计模式,装饰模式,模式,面向对象)