Friends who have bought mobile phones online know that merchants usually match several packages for mobile phones, allowing customers to choose freely. Now there is a store selling mobile phones that has launched three packages for all mobile phones. The standard package is 4999 yuan. , the bare metal is 200 yuan off the standard package, and the full configuration is 100 yuan extra on the standard package. We use PHP to implement it.
<?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(); ?>
We have set three packages for iPhone and Lumia920 respectively, but if you look at it, you can find that the bare method and fullSet method of iPhone and Lumia920 are exactly the same, which creates a kind of coupling. We can completely use bare The method is separated from the fullSet method, which requires decoration mode. The code is as follows:
<?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(); ?>
The above is the content of PHP object-oriented development - decoration mode. For more related content, please pay attention to the PHP Chinese website (www.php .cn)!