装饰模式
所谓装饰模式就是让程序一层一层的包下来, 像是大口袋套小口袋。
例:
- 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
- ?>
首先必须保证一个基类,所有的子类都继承了基类的方法,并给出自己特有的定义!
然后层层嵌套,调用上一级的对象,形成嵌套的规则!即时一个装饰模式。
主要用在一些层层嵌套的规则中!