未加星标

PHP设计模式之装饰器模式实例详解

字体大小 | |
[开发(php) 所属分类 开发(php) | 发布者 店小二05 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

本文实例讲述php设计模式之装饰器模式。分享给大家供大家参考,具体如下:

装饰器模式又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

UML类图:

PHP设计模式之装饰器模式实例详解

角色:

组件对象的接口:可以给这些对象动态的添加职责
所有装饰器的父类:需要定义一个与组件接口一致的接口,并持有一个Component对象,该对象其实就是被装饰的对象。
具体的装饰器类:实现具体要向被装饰对象添加的功能。用来装饰具体的组件对象或者另外一个具体的装饰器对象。

具体代码:

<?php
/**
* Created by PhpStorm.
* User: Jiang
* Date: 2015/5/3
* Time: 11:11
*/
/**组件对象接口
* Interface IComponent
*/
interface IComponent
{
function Display();
}
/**待装饰对象
* Class Person
*/
class Person implements IComponent
{
private $name;
function __construct($name)
{
$this->name=$name;
}
function Display()
{
echo "装扮的:{$this->name}<br/>";
}
}
/**所有装饰器父类
* Class Clothes
*/
class Clothes implements IComponent
{
protected $component;
function Decorate(IComponent $component)
{
$this->component=$component;
}
function Display()
{
if(!empty($this->component))
{
$this->component->Display();
}
}
}
//------------------------------具体装饰器----------------
class PiXie extends Clothes
{
function Display()
{
echo "皮鞋 ";
parent::Display();
}
}
class QiuXie extends Clothes
{
function Display()
{
echo "球鞋 ";
parent::Display();
}
}
class Tshirt extends Clothes
{
function Display()
{
echo "T恤 ";
parent::Display();
}
}
class Waitao extends Clothes
{
function Display()
{
echo "外套 ";
parent::Display();
}
}

调用客户端测试代码:

header("Content-Type:text/html;charset=utf-8");
//------------------------装饰器模式测试代码------------------
require_once "./Decorator/Decorator.php";
$Yaoming=new Person("姚明");
$aTai=new Person("A泰斯特");
$pixie=new PiXie();
$waitao=new Waitao();
$pixie->Decorate($Yaoming);
$waitao->Decorate($pixie);
$waitao->Display();
echo "<hr/>";
$qiuxie=new QiuXie();
$tshirt=new Tshirt();
$qiuxie->Decorate($aTai);
$tshirt->Decorate($qiuxie);
$tshirt->Display();

适用场景:

1. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。

2. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。

3. 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。


您可能感兴趣的文章:学习php设计模式 php实现装饰器模式(decorator)PHP简单装饰器模式实现与用法示例PHP、pythonjavascript的装饰器模式对比PHP设计模式之注册树模式分析PHP设计模式之工厂模式详解php简单实现单态设计模式的方法分析轻松掌握php设计模式之访问者模式PHP常用的三种设计模式汇总PHP设计模式之迭代器模式PHP设计模式之观察者模式实例php设计模式之委托模式PHP常用设计模式之委托设计模式

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

tags: PHP,Display,gt,模式,php,装饰,function,class,component,new,echo,Clothes,对象,设计,IComponent
分页:12
转载请注明
本文标题:PHP设计模式之装饰器模式实例详解
本站链接:http://www.codesec.net/view/572604.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(24)