您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/5/15 2:54:16发布24次查看
在网上买过手机的朋友都知道,商家通常会为手机搭配好几个套餐,让客户自由选择,现在有一家卖手机的店,为所有手机推出了三种套餐,标准套餐为4999元,裸机为标准套餐减200元,全套配置为标准套餐加100元,我们用php将之实现。
<?php abstract 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方法分离出来,这就需要装饰模式,代码如下:
<?php abstract 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; } } //装饰类 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面向对象开发之——装饰模式的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product