您的位置:首页 > 编程语言 > PHP开发

PHP设计模式中之装饰模式

2010-11-24 17:47 513 查看
 下面是一个简单类,帮助了解装饰模式,希望能对大家有帮助,有些地方改成中文,便于了解。

  我要到饭馆吃饭,程序的结果是打印对我吃的东西的描述和计算价钱。

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

//基类
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: