php面向对象开发之——装饰模式
来源:互联网 发布:python raisr 编辑:程序博客网 时间:2024/04/30 01:41
在网上买过手机的朋友都知道,商家通常会为手机搭配好几个套餐,让客户自由选择,现在有一家卖手机的店,为所有手机推出了三种套餐,标准套餐为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;}}//装饰类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面向对象开发之——装饰模式
- php面向对象之装饰模式
- php面向对象开发之——组合模式
- php面向对象开发之——单例模式
- php面向对象开发之——工厂模式
- php面向对象开发之——抽象工厂模式
- php面向对象开发之——原型模式
- php设计模式之———装饰器模式
- PHP面向对象之简单工厂模式
- Java面向对象设计模式(七)——装饰模式(Decorator)
- 深入PHP面向对象、模式与实践——对象
- 面向对象程序设计第六次实验课——群与子群(装饰模式)
- 面向对象中装饰模式的理解
- PHP 面向对象开发
- PHP面向对象开发
- PHP之装饰器模式
- php之大话装饰模式
- PHP面向对象——单例模式
- 深入学习android之AlarmManager
- mtk android 编译命令
- tuxedo12.1.1.0 libtux导出函数的错误
- Emacs常用命令
- 查看Debian的版本信息
- php面向对象开发之——装饰模式
- 如何在C#中调用Excel
- Linux 查看CPU信息、机器型号等硬件信息
- 关于未来
- windows cmd ftp上传和下载
- MongoDB 安装配置
- ora-16014;ora-00312 常见的问题
- 万能数据库查询分析器使用技巧之(八)
- 分享android开发过程中用到的一些开源框架