首页 > 网站 > 建站经验 > 正文

PHP设计模式之装饰器模式定义与用法详解

2019-11-02 14:09:43
字体:
来源:转载
供稿:网友

本文实例讲述了PHP设计模式之装饰器模式定义与用法。分享给大家供大家参考,具体如下:

什么是装饰器模式

作为一种结构型模式, 装饰器(Decorator)模式就是对一个已有结构增加"装饰".

适配器模式, 是为现在有结构增加的是一个适配器类,.将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以很好的合作.

装饰器模式是将一个对象包装起来以增强新的行为和责任.装饰器也称为包装器(类似于适配器)

有些设计设计模式包含一个抽象类,而且该抽象类还继承了另一个抽象类,这种设计模式为数不多,而装饰器就是其中之一.

什么时候使用装饰器模式

基本说来, 如果想为现有对象增加新功能而不想影响其他对象, 就可以使用装饰器模式.如果你好不容易为客户创建了一个网站格式, 主要组件的工作都很完美, 客户请求新功能时, 你肯定不希望推翻重来, 再重新创建网站. 例如, 假设你已经构建了客户原先请求的组件, 之后客户又有了新的需求, 希望在网站中包含视频功能. 你不用重写原先的组件, 只需要"装饰"现有组件, 为它们增加视频功能. 这样即可以保持原来的功能,还可以增加新功能.

有些项目可能有时需要装饰, 而有时不希望装饰, 这些项目体现了装饰器设计模式的另一个重要特性.假设你的基本网站开发模式可以满足大多数客户的要求. 不过, 胡些客户还希望有一些特定的功能来满足他们的需求. 并不是所有人都希望或需要这些额外的功能. 作为开发人员, 你希望你创建的网站能满足客户的业务目标. 所以需要提供"本地化"(customerization)特性, 即针对特定业务提供的特性. 利用装饰器模式, 不仅能提供核心功能, 还可以用客户要求的特有功能"装饰"这些核心功能.

简单的装饰器例子

一个web开发企业,计划建立一个基本网站,并提供一些增强功能. 不过,web开发人员知道, 尽管这个基本计划适用于大多数客户, 但客户以后很可能还希望进一步提升, 利用装饰器模式, 可以很容易地增加多个具体装饰器,另外由于你能选择要增加的装饰器, 所以企业不仅能控制功能, 还可以控制项目的成本 .

Component接口

Component参与者是一个接口, 在这里, 它是一个抽象类IComponent. 这个抽象类只有一个属性$site, 另外有两个抽象方法getSite()getPrice().Component参与者具体为具体组件和Decorator参与者抽象类建立接口:

IComponent.php

<?phpabstract class IComponent{  protected $site;  abstract public function getSite();  abstract public function getPrice();}

Decorator接口

这个例子中的装饰器接口可能会让你惊讶.这是一个抽象类,而且它还扩展了另一个抽象类! 这个类的作用就是维护组件接口(IComponent)的一个引用, 这是通过扩展IComponent完成的:

Decorator.php

<?phpabstract class Decorator extends IComponent{  /*  任务是维护Component的引用  继承getSite()和getPrice()  因为仍然是抽象类,所以不需要实现父类任何一个抽象方法  */}

Decorator类的主要作用就是维护组件接口的一个引用.

在所有的装饰器模式实现中, 你会发现,具体组件和装饰顺都有相同的接口. 它们的实现可能不同, 另外除了基本接口的属性和方法外, 组件和装饰器可能还有额外的属性和方法.

具体组件

这个例子中只有一个具体组件,它生成一个网站名, 另外生成一个基本网站报价:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表