hongblue 发表于 2017-4-4 06:11:08

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

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



[*]class 食物{  
[*] var $des='食物';  
[*] var $cost;  
[*] function getdes(){  
[*] return $this->des;  
[*] }  
[*] function getcost(){  
[*] return $this->cost;  
[*] }  
[*]}  
[*]//被装饰者类  
[*]class 米饭 extends 食物{  
[*] var $des="米饭";  
[*] var $cost=0.44;  
[*]}  
[*]//装饰者类与被装饰者继承自同一个基类  
[*]class 菜 extends 食物{  
[*] var $obj;  
[*] var $des='';  
[*] var $cost;  
[*]}  
[*]//细分的装饰者  
[*]class 炒土豆丝 extends 菜{  
[*] var $obj;  
[*] var $des='土豆丝';  
[*] var $cost=0.10;  
[*] function __construct($obj){  
[*] $this->obj=$obj;  
[*] }  
[*] function getdes(){  
[*] return $this->obj->getdes().$this->des;  
[*] }  
[*] function getcost(){  
[*] return $this->obj->getcost()+$this->cost;  
[*] }  
[*]}  
[*]//有一个细分的装饰者  
[*]class 咸菜 extends 菜{  
[*] var $obj;  
[*] var $des='咸菜';  
[*] var $cost=0.10;  
[*] function __construct($obj){  
[*] $this->obj=$obj;  
[*] }  
[*] function getdes(){  
[*] return $this->obj->getdes().$this->des;  
[*] }  
[*] function getcost(){  
[*] return $this->obj->getcost()+$this->cost;  
[*] }  
[*]}  
[*]//更多的菜  
[*]......  
[*]//测试代码  
[*]$午饭= new 米饭();  
[*]$午饭=new 土豆丝($午饭);  
[*]$午饭=new 咸菜($午饭);  
[*]echo $午饭->getdes();//outputs 米饭土豆丝咸菜  
[*]echo $午饭->getcost();//outputs 0.64  
[*]?>  

 
 
首先必须保证一个基类,所有的子类都继承了基类的方法,并给出自己特有的定义!
然后层层嵌套,调用上一级的对象,形成嵌套的规则!即时一个装饰模式。
主要用在一些层层嵌套的规则中!
页: [1]
查看完整版本: php中的设计模式---装饰模式