PHP设计模式之装饰模式2009-12-30下面是一个简单类,帮助了解装饰模式,希望能对大家有帮助,有些地方改成中文,便于了解。我要到饭馆吃饭,程序的结果是打印对我吃的东西的描述和计算价钱。这样一层一层的包下来, 像是大口袋套小口袋,就是所谓的装饰模式。//基类 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