Zend Framework 1.10.1 理解和使用 Zend 表单装饰器之二:装饰器基础

装饰器模式概述

为了开始,我们将介绍一些关于装饰器设计模式的背景知识。一种通用的技术,来定义一个通用的界面,这个界面将会同时被你的初始的对象和装饰器同时应用;你的装饰器然后接受初始化的对象作为一种依赖,将代理或者重写它的方法。让我们把它转为代码,来更易于理解:

然后你为 StandardWindow 类型创建一个对象,把它传递 LockedWindow 的构造函数,你的 window 对象现在有了不同的行为。它的迷人之处在于,你不必应用在你的 standard window 类上的任何种类的 locking 功能。同时,你可以传递你的 locked window,好象它是另外一个 window。

装饰器模式的一个特别有用之处,是创建对象的原文表现。举例来说,你可能有一个 Person 对象,它自己本身,没有文字表现。通过使用装饰器模式,你可以创建一个对象,它扮演起来,就象它就是一个 Person,而且提供了文字呈现那个 Person 的功能。

在这个特定的例子中,我们将使用 duck typing 而不是一个精确的接口。这使我们的应用程序更加具有弹性,同时还允许装饰器对象如同一个 Person 对象一样行动。

在这个例子中,你把你的 Person 实例传递给 TextPerson 构造函数。通过使用方法重载,你可以能够继续调用 构造函数。通过使用方法重载,你可以能够继续调用 构造函数。通过使用方法重载,你可以能够继续调用 Person 的全部方法——设定姓,名,或者性别——但是你现在通过 __toString() 方法也获得了一个字符串表现。

后面的一个例子和 Zend_Form 的装饰器更接近。关键的不同之处是,作为一个装饰器包裹元素的代替,元素有一个或者更多装饰器附加到它身上,然后它注入自己来呈现。装饰器然后可以访问元素的方法和属性来达到为元素创建一个表现的目的——或者它(元素?)的一个子集。

创建你的第一个装饰器

Zend_Form 装饰器都应用一个通用的接口,Zend_Form_Decorator_Interface。那个接口提供了设置装饰器特定的选项,注册和检索元素,以及呈现的功能。一个基本的装饰器,Zend_Form_Decorator_Abstact,提供了大部分的你将需要的功能,同时还有呈现逻辑的异常。

让我们考虑一种情形,就是我们只是希望把一个元素当作一个带有 label 的标准表单文字 input 来呈现。我们不担心错误处理或者现在这个元素是否应该被其它的标签包裹——只是基本的。这样一个装饰器可能看起来象这样:

让我们创建一个使用这个装饰器的元素:

呈现这个元素将得到以下的标记结果:

你也可以把这个类放到你的库文件的某个地方,把路径通知你的元素,指向装饰器,如同简单的 SimpleInput:

这样给了你在其它项目中重复使用的好处,也打开了以后为了那个装饰器提供其它应用的大门。

在下一章中,我们会学习如何结合装饰器来创建组合输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值