代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PHP
】
委托模式
作者:
PHP设计模式
/ 发布于
2011/11/29
/
633
<div>?<?php /** * 转自 《PHP设计模式》 第七章: 委托模式 * 当一个对象包含复杂单独立的,必须基于判决执行的功能性的若干部分时,最佳的方法是适用基于委托设计模式的对象。 * */</div> <div>/** * 示例: Web站点具有创建MP3文件播放列表的功能, 也具有选择以 M3U 或 PLS 格式下载播放列表的功能。 * * 以下代码示例展示常规与委托两种模式实现 * */ //常规实现 class Playlist { private $_songs; public function __construct() { $this->_songs = array(); } public function addSong($location, $title) { $song = array("location" => $location, "title" => $title); $this->_songs[] = $song; } public function getM3U() { $m3u = "#EXTM3U\n\n"; foreach ($this->_songs as $song) { $m3u .= "#EXTINF: -1, {$song['title']}\n"; $m3u .= "{$song['location']}\n"; } return $m3u; } public function getPLS() { $pls = "[playlist]]\nNumberOfEntries = ". count($this->_songs) . "\n\n"; foreach ($this->_songs as $songCount => $song) { $counter = $songCount + 1; $pls .= "File{$counter} = {$song['location']}\n"; $pls .= "Title{$counter} = {$song['title']}\n"; $pls .= "LengthP{$counter} = -1 \n\n"; } return $pls; } } <div>$playlist = new Playlist();</div> <div>$playlist->addSong("/home/aaron/music/brr.mp3", "Brr"); $playlist->addSong("/home/aaron/music/goodbye.mp3", "Goodbye");</div> <div>$externalRetrievedType = "pls";</div> if ($externalRetrievedType == "pls") { $playlistContent = $playlist->getPLS(); } else { $playlistContent = $playlist->getM3U(); } <div>echo $playlistContent;</div> <div>//委托模式实现 class newPlaylist {</div> <div>private $_songs; private $_tyepObject;</div> <div>public function __construct($type) { $this->_songs = array(); $object = "{$type}Playlist"; $this->_tyepObject = new $object; } public function addSong($location, $title) { $song = array("location" => $location, "title" => $title); $this->_songs[] = $song; } public function getPlaylist() { $playlist = $this->_tyepObject->getPlaylist($this->_songs); return $playlist; } } <div>class m3uPlaylist { public function getPlaylist($songs) { $m3u = "#EXTM3U\n\n"; foreach ($songs as $song) { $m3u .= "#EXTINF: -1, {$song['title']}\n"; $m3u .= "{$song['location']}\n"; } return $m3u; } } <div>class plsPlaylist { public function getPlaylist($songs) { $pls = "[playlist]]\nNumberOfEntries = ". count($songs) . "\n\n"; foreach ($songs as $songCount => $song) { $counter = $songCount + 1; $pls .= "File{$counter} = {$song['location']}\n"; $pls .= "Title{$counter} = {$song['title']}\n"; $pls .= "LengthP{$counter} = -1 \n\n"; } return $pls; } } <div>$externalRetrievedType = "pls"; $playlist = new newPlaylist($externalRetrievedType);</div> <div>$playlist->addSong("/home/aaron/music/brr.mp3", "Brr"); $playlist->addSong("/home/aaron/music/goodbye.mp3", "Goodbye");</div> <div>$playlistContent = $playlist->getPlaylist();</div> <div>echo $playlistContent;</div> <div>/* End of Delegate.class.php */ /* Location the file Design/Delegate.class.php */</div>
试试其它关键字
委托模式
同语言下
.
用net匹配并替换iOS标准的emoji表情符号
.
处理带Emoji表情的的字符串
.
获取微信昵称时 过滤特殊字符
.
通过判断上传文件的头字符来判断文件的类型
.
模拟百度URL加密解密算法
.
以太坊检查地址是否合法
.
实现crontab解析类
.
获取每个月的开始和结束时间
.
图片上传工具类
.
APP手机应用信息采集
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
PHP设计模式
贡献的其它代码
(
10
)
.
中介者模式
.
迭代器模式
.
解释器模式
.
工厂模式
.
外观模式
.
委托模式
.
装饰器模式
.
代理模式
.
原型模式
.
观察者模式
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3