PHP-设计模式-装饰器模式

装饰器类的作用:不使用继承,也能是对象使用新方法。重点是类实例化出来的对象。
装饰器类(配菜类)也必须继承food类,否则就不是装饰器类了(嗯!就是这样)
装饰器: 手抓饼实现。
1:food抽象类 -》cake类
2:food抽象类-》peicai抽象类 -》各种配菜类(有新方法)
3:实例化cake类($obj) 将$obj(旧)注入到配菜类中,赋值给对象$obj(新),则既能使用$obj(旧)中的方法 又能使用$obj(新)的方法

<?php 
header("Content-type: text/html; charset=utf-8");
//定义一个Food抽象类。
	abstract class Food{
		abstract function getFood();
		abstract function price();
	}
//饼,继承自Food类,
	class cake extends Food{
		function getFood(){
			return '这是一份美味的手抓饼';
		}
		function price(){
			return 4;
		}
	}
//配菜也继承自Food类,这是装饰器模式的格式。
	abstract class peicai extends Food{
		public  $food = null;
		function __construct(Food $food){
			$this->food = $food;
		}
	}
	class egg extends peicai{
	  function getFood(){
		//第二个重点在这里,用到新的方法,在不继承的情况下增加新方法。
		return $this->food->getFood()."加上".$this->shell().'的鸡蛋';
	  }
		function price(){
			return $this->food->price()+2;
		}
		function shell(){
			return '剥掉蛋壳';
		}	
	}
	
	$a = new cake;
	//ECHO $a->getFood().'<BR>';
	$b = new egg($a);
	echo $b->getFood().'<BR>';
	echo $b->price();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值