zoukankan      html  css  js  c++  java
  • 装饰器模式

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

      装饰器模式(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
  • 相关阅读:
    前端开发 vue,angular,react框架对比1
    前端开发 Angular
    前端开发 Vue Vue.js和Node.js的关系
    net技术
    net技术方案
    软件工程项目费用计算
    前端开发 Vue -4promise解读2
    前端开发 Vue -4promise解读1
    mybatis与hibernate区别
    struts2和springmvc的区别
  • 原文地址:https://www.cnblogs.com/hangtt/p/6263427.html
Copyright © 2011-2022 走看看