装饰器模式

装饰器模式

  • 对已有对象的部分内容或者功能进行调整,但是不需要修改原始对象结构,可以使用装饰器设计模式
    • 装饰器主要是不改变现有对象数据结构的前提
  • 装饰器模式(Decorator),可以动态地添加修改类的功能
  • 一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法
  • 使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性
  • 代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class UserInfo {

    public $userInfo = array();

    public function addUser($userInfo) {
    $this->userInfo[] = $userInfo;
    }

    public function getUserList() {
    print_r($this->userInfo);
    }
    }


    class UserInfoDecorate {

    public function makeCaps($UserInfo) {
    foreach ($UserInfo->userInfo as &$val) {
    $val = strtoupper($val);
    }
    }

    }

    $UserInfo = new UserInfo;
    $UserInfo->addUser('zhu');
    $UserInfo->addUser('initphp');
    $UserInfoDecorate = new UserInfoDecorate;
    $UserInfoDecorate->makeCaps($UserInfo);
    $UserInfo->getUserList();