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]