装饰器模式

 

  通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。
显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。
装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。

  装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。
这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

 

 

 1 <?php
 2 
 3 interface Shape
 4 {
 5     public function draw();
 6 }
 7 
 8 
 9 
10 class Circle implements Shape
11 {
12     public function draw()
13     {
14         echo "<br/>我是圆形";
15     }
16 }
17 
18 class Rectangle implements Shape
19 {
20     public function draw()
21     {
22         echo "<br/>我是长方形";
23     }
24 }
25 
26 
27 
28 class RedBorderDecorator implements Shape
29 {
30     private $_shape;
31 
32     public function __construct(\Shape $shape)
33     {
34         $this->_shape = $shape;
35     }
36 
37     public function draw()
38     {
39         $this->setBorder();
40         $this->_shape->draw();
41     }
42 
43 
44 
45     private function setBorder()
46     {
47         echo "<br/>我是红色边框设置";
48     }
49 }
50 
51 
52 $c = new Circle();
53 $c->draw();
54 
55 $red = new RedBorderDecorator($c);
56 $red->draw();
View Code

 

posted @ 2017-01-09 00:40  _logan  阅读(75)  评论(0编辑  收藏  举报