php设计模式(15)装饰器模式

2017-03-27 13:14:43 admin ...

前言:

上一节我们一起讨论了数据对象映射模式,今天继续装饰器模式。

内容概要

1、什么是装饰器模式

2、UML图

3、PHP代码示例

一、什么是装饰器模式

我们可以使用继承或者组合的方式来扩展一个类的功能,这种方式随着子类的增多以及子类的子类的出现,导致系统复杂,代码混乱,而装饰者模式采用继承和引用的方式,减少继承,动态增加类的功能,是一种常用的设计模式。

装饰着模式提高代码的复用性,不必重写已有功能,应对快速和细小的需求变化,不影响其他代码的运行,只是在代码流中添加一个或者多个”装饰”目标对象的装饰器。

装饰器模式的优点是比较灵活的处理需求变化,避免在基类中添加太多的功能。但是,这种模式对开发者来说提高了难度:调试排错会增加难度。

装饰器模式有以下的角色:

抽象构件(Component)角色:定义接口,用于接收类新增的功能。

具体构件(Concrete Component)角色:没有装饰过的裸类。

装饰(Decorator)角色:抽象装饰器,用于将具体装饰器调度。

具体装饰(Concrete Decorator)角色:增添装饰作用。

官方的说明,我们举个例子,大白话解释一下:

假设我们有一个手机(具体构件),它只能通电话使用。产品经理要求你在原手机的基础上增加发短信功能(具体装饰器),你开发一个发短信的模块,插到原手机上(装饰器),于是现在手机有了发短信功能,卖出的那五个手机通话功能还有,如果要升级购买发短信模块即可。这时候,产品经理又要求增加拍照的功能,做法和增加发短信模块一样。这样所有的手机不用重新制造,都可以使用,只是功能不同。这就是装饰器模式。

二、UML图

图来源于网上,借用一下。

三、PHP代码示例

代码来源于网上,做了写修改。


手机通话
发短信 
手机通话
发短信 
拍照

不对之处请各位指正

相似文章