在网上买过手机的朋友都知道,商家通常会为手机搭配好几个套餐,让客户自由选择,现在有一家卖手机的店,为所有手机推出了三种套餐,标准套餐为4999元,裸机为标准套餐减200元,全套配置为标准套餐加100元,我们用php将之实现。
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 '
';
$lumia920=new bareLumia920();
echo 'lumia920全套配置价格为:'.$lumia920->getPrice().',配置为:'.$lumia920->getInfo();
?>我们为iphone和lumia920分别设置了三种套餐,但观察一下可以发现,iphone和lumia920的bare方法和fullSet方法完全一样的,这造成了一种耦合,我们完全可以将bare方法和fullSet方法分离出来,这就需要装饰模式,代码如下:
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;
}
}
//装饰类
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 '
';
$lumia920=new bare(new lumia920());
echo 'lumia920裸机价格为:'.$lumia920->getPrice().',配置为:'.$lumia920->getInfo();
?> 以上就是php面向对象开发之——装饰模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!
ShopWind网店系统是国内最专业的网店程序之一,采用ASP语言设计开发,速度快、性能好、安全性高。ShopWind网店购物系统提供性化的后台管理界面,标准的网上商店管理模式和强大的网店软件后台管理功能。ShopWind网店系统提供了灵活强大的模板机制,内置多套免费精美模板,同时可在后台任意更换,让您即刻快速建立不同的网店外观。同时您可以对网模板自定义设计,建立个性化网店形象。ShopWind网










