[转]PHP设计模式之装饰者模式
转载自:http://blog.chinaunix.net/space.php?uid=8013861&do=blog&id=222321
- <?php
-
/**
- * 装饰者模式
- */
-
/**
- * 冰激凌抽象类
- */
- abstract class ICE
- {
- public abstract function getDescription();
- public abstract function cost();
- }
-
/**
- * 牛奶冰激凌,售价17RMB
- */
- class MilkIce extends ICE
- {
- public $description = '纯牛奶制作的冰激凌';
- public function getDescription()
- {
- return $this->description;
- }
- public function cost()
- {
- return 17;
- }
- }
-
/**
- * 沙冰冰激凌,售价10RMB
- */
- class SlushIce extends ICE
- {
- public $description = '冰块制作的冰激凌';
- public function getDescription()
- {
- return $this->description;
- }
- public function cost()
- {
- return 10;
- }
- }
-
/**
- * 冰激凌调料抽象类
- */
- abstract class CondimentIce extends ICE
- {
- //public abstract function getDescription();
- //public abstract function cost();
- }
-
/**
- * 加香菜口味,附加5RMB
- */
- class Herb extends CondimentIce
- {
- public $ice;
- public $description;
- public function __construct($ice)
- {
- $this->ice = $ice;
- $this->description = '法国香草';
- }
- public function getDescription()
- {
- return $this->ice->getDescription() . ',' . $this->description;
- }
- public function cost()
- {
- return $this->ice->cost() + 5;
- }
- }
-
/**
- * 加草莓口味,附加8RMB
- */
- class Berries extends CondimentIce
- {
- public $ice;
- public $description;
- public function __construct($ice)
- {
- $this->ice = $ice;
- $this->description = '野草莓';
- }
- public function getDescription()
- {
- return $this->ice->getDescription() . ',' . $this->description;
- }
- public function cost()
- {
- return $this->ice->cost() + 8;
- }
- }
- // example
- // 购买一个奶油香草冰激凌
- $ice_object = new MilkIce();
- $ice_object = new Herb($ice_object);
- echo $ice_object->cost();
- echo $ice_object->getDescription();
- // 购买一个沙冰+香草+草莓
- $ice2 = new SlushIce();
- $ice2 = new Herb($ice2);
- $ice2 = new Berries($ice2);
- echo $ice2->cost();
- echo $ice2->getDescription();
是不是有些像递归调用
-------------我的签名档---------------------
年轻人,还需要多努力!
--------------------------------------------
浙公网安备 33010602011771号