装饰器模式

1 <?php
 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充
 3 
 4 //武器基类
 5 abstract class Weapon{
 6     abstract public function descriptions();
 7     abstract public function cost();
 8 }
 9 
10 //剑类
11 class Glave extends Weapon{
12     public function descriptions(){
13         return 'Glave';
14     }
15     
16     public function cost(){
17         return "100";
18     }
19 }
20 
21 //匕首类
22 class Knife extends Weapon{
23     public function descriptions(){
24         return __CLASS__;
25     }
26     public function cost(){
27         return "80";
28     }
29 }
30 
31 //斧类
32 class Axe extends Weapon{
33     public function descriptions(){
34         return  __CLASS__;
35     }
36     public function cost(){
37         return "200";
38     }
39 }
40 
41 //属性类
42 class Property extends Weapon{
43     protected $_weapon = null;
44     protected $_price = 0;
45     protected $_descriptions = '';
46     public function __construct(Weapon $weapon){
47         $this->_weapon = $weapon;
48     }
49     public function cost(){
50         return     $this->_weapon->cost() + $this->_price;
51     }
52     
53     public function descriptions(){
54         return $this->_weapon->descriptions().$this->_descriptions;
55     }
56 }
57 
58 //力量属性
59 class Strength extends Property{
60     protected $_price = 30;
61     protected $_descriptions = '+ Strength';
62 }
63 
64 //敏捷属性
65 class Agility extends Property{
66     protected $_price = 50;
67     protected $_descriptions = '+ Agility';
68 }
69 
70 //智力属性
71 class Intellect extends Property{
72     protected $_price = 20;
73     protected $_descriptions = '+ Intellect';
74 }
75 
76 $weapon = new Agility(new Strength(new Strength(new Glave())));
77 echo $weapon->cost();
78 echo $weapon->descriptions();
原文地址:https://www.cnblogs.com/yulei126/p/6786100.html