• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php面向对象开发之——装饰模式

php 搞代码 4年前 (2022-01-22) 15次浏览 已收录 0个评论

在网上买过手机的朋友都知道,商家通常会为手机搭配好几个套餐,让客户自由选择,现在有一家卖手机的店,为所有手机推出了三种套餐,标准套餐为4999元,裸机为标准套餐减200元,全套配置为标准套餐加100元,我们用php将之实现。

<?phpabstract class mobile{	abstract public function getInfo();	abstract public function getPrice();}class iphone extends mobile{	private $price=4999;	private $info='官方标配(手机+电源+数据线+耳机)';		public function getInfo(){		return $this->info;	}		public function getPrice(){		return $this->price;	}}class bareIphone extends iphone{		private $info='裸机(手机)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return parent::getPrice()-200;	}}class fullSetIphone extends iphone{		private $info='套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return parent::getPrice()+100;	}	}class lumia920 extends mobile{	private $price=4399;	private $info='官方标配(手机+电源+数据线+耳机)';		public function getInfo(){		return $this->info;	}		public function getPrice(){		return $this->price;	}}class bareLumia920 extends lumia920{		private $info='裸机(手机)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return parent::getPrice()-200;	}}class fullSetLumia920 extends lumia920{		private $info='套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return parent::getPrice()+100;	}	}$iphone=new fullSetIphone();echo 'iphone全套配置价格为:'.$iphone->getPrice().',配置为:'.$iphone->getInfo();echo '<br>';$lumia920=new bareLumia920();echo 'lumia920全套配置价格为:'.$lumia920->getPrice().',配置为:'.$lumia920->getInfo();?>

我们为iphone和lumia920分别设置了三种套餐,但观察一下可以发现,iphone和lumia920的bare方法和fullSet方法完全一样的,这造成了一种耦合,我们完全可以将bare方法和fullSet方法分离出来,这就需要装饰模式,代码如下:

<?phpabstract class mobile{	abstract public function getInfo();	abstract public function getPrice();}class iphone extends mobile{	private $price=4999;	private $info='官方标配(手机+电源+数据线+耳机)';		public function getInfo(){		return $this->info;	}		public function getPrice(){		return $this->price;	}}class lumia920 extends mobile{	private $price=4399;	private $info='官方标配(手机+电源+数据线+耳机)';		public function getInfo(){		return $this->info;	}		public function getPrice(){		return $this->price;	}}//装饰<p style="color:transparent">2本文来源gao!daima.com搞$代!码网</p><span>搞代gaodaima码</span>类abstract class decorateIphone extends mobile{	protected $iphone;		public function __construct(mobile $iphone){		$this->iphone=$iphone;	} }class bare extends decorateIphone{		private $info='裸机(手机)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return $this->iphone->getPrice()-200;	}}class fullSet extends decorateIphone{		private $info='套装(手机+电源+数据线+耳机+手机壳+贴膜+移动电源)';		public function getInfo(){		return $this->info;	}	public function getPrice(){		return $this->iphone->getPrice()+100;	}	}$iphone=new fullSet(new iphone());echo 'iphone全套配置价格为:'.$iphone->getPrice().',配置为:'.$iphone->getInfo();echo '<br>';$lumia920=new bare(new lumia920());echo 'lumia920裸机价格为:'.$lumia920->getPrice().',配置为:'.$lumia920->getInfo();?>

以上就是php面向对象开发之——装饰模式的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php面向对象开发之——装饰模式
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址