装饰与视图

时间:2011-12-05 22:55:40

标签: php view design-patterns decorator

如何在结构视图中应用装饰器,知道只有一个视图负责执行代码块来呈现模板?为:

<?php
          class View {

                 public function render ( $template ) {
                        printf ( 'Rendering template %s' , $template ) ;
                 }

          }

          class MemberView { }

          class AdministratorView { }


          $Admin = new MemberView ( new AdministratorView ( ) ) ;
          $Admin->render ( ) ;

在这种情况下,我正在渲染管理员,但是在浏览驱动程序时,将获取每个成员已到达视图并执行以显示面板的基本功能,或仅管理员可以看到的内容,但在逻辑中,管理员也是会员..因此必须制作结构,适用于主持人,全球版主......

我的问题是在这种情况下如何应用装饰器..

1 个答案:

答案 0 :(得分:0)

好吧,我们设法解决了问题..解决方案:

<?php

          class View {

                 public function render ( $template ) {
                        printf ( 'Rendering template %s' , $template ) ;
                 }

          }

          abstract class ViewDecorator extends View {

                 protected $view ;

                 public function __construct ( View $view ) {
                        $this->view = $view ;
                 }

          }

          class MemberView extends ViewDecorator {

                 public function render ( ) {
                        $this->view->render ( 'Member' ) ;
                 }

          }

          class AdministratorView extends ViewDecorator {

                 public function render ( ) {
                        $this->view->render ( 'Administrator' ) ;
                 }

          }

          $ADM = new MemberView ( new AdministratorView ( new View ( ) ) ) ;
          $ADM->render ( ) ;

输出:渲染模板管理员

如果我删除了管理员的渲染。

<?php
          $Member = new MemberView ( new View ( ) ) ;
          $Member->render ( ) ;

输出:渲染模板会员