首页 > php教程 > php手册 > 正文

PHP设计模式之中介者模式

php中文网
发布: 2016-06-21 08:52:52
原创
1635人浏览过

中介者: 中介者设计莫用于开发一个对象,这个对象能够在类似对象相互之间不直接交互的情况下传送或调节对这些对象的集合的修改 
处理具有类似属性并且属性需要保持同步的非耦合对象时,最佳的做法是使用基于中介者设计模式的对象。

<ol class="dp-c"><li class="alt"><span><span><?php   </span></span></li><li><span>    <span class="comment">/** </span> </span></li><li class="alt"><span><span class="comment">     * 测试用例描述:示例代码不仅允许乐队进入和管理他们的音乐合集,而且还允许乐队更新他们的配置文件,修改乐队相关信息以及更新其CD信息 </span> </span></li><li><span><span class="comment">     *        现在,艺术家可上传MP3集合并从Web站点撤下CD。 因此, Web站点需要保持相对应的CD和MP3彼此同步。 </span> </span></li><li class="alt"><span><span class="comment">     */</span><span>   </span></span></li><li><span>    <span class="comment">//CD类  </span><span> </span></span></li><li class="alt"><span>    <span class="keyword">class</span><span> CD {   </span></span></li><li><span>           </span></li><li class="alt"><span>        <span class="keyword">public</span><span> </span><span class="vars">$band</span><span>  = </span><span class="string">''</span><span>;   </span></span></li><li><span>        <span class="keyword">public</span><span> </span><span class="vars">$title</span><span> = </span><span class="string">''</span><span>;   </span></span></li><li class="alt"><span>        <span class="keyword">protected</span><span> </span><span class="vars">$_mediator</span><span>;   </span></span></li><li><span>           </span></li><li class="alt"><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> __construct(MusicContainerMediator </span><span class="vars">$mediator</span><span> = NULL) {   </span></span></li><li><span>            <span class="vars">$this</span><span>->_mediator = </span><span class="vars">$mediator</span><span>;   </span></span></li><li class="alt"><span>        }   </span></li><li><span>           </span></li><li class="alt"><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> save() {   </span></span></li><li><span>            <span class="comment">//具体实现待定  </span><span> </span></span></li><li class="alt"><span>            var_dump(<span class="vars">$this</span><span>);   </span></span></li><li><span>        }   </span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> changeBandName(</span><span class="vars">$bandname</span><span>) {   </span></span></li><li class="alt"><span>            <span class="keyword">if</span><span> ( ! </span><span class="func">is_null</span><span>(</span><span class="vars">$this</span><span>->_mediator)) {   </span></span></li><li><span>                <span class="vars">$this</span><span>->_mediator->change(</span><span class="vars">$this</span><span>, </span><span class="keyword">array</span><span>(</span><span class="string">"band"</span><span> => </span><span class="vars">$bandname</span><span>));   </span></span></li><li class="alt"><span>            }   </span></li><li><span>            <span class="vars">$this</span><span>->band = </span><span class="vars">$bandname</span><span>;   </span></span></li><li class="alt"><span>            <span class="vars">$this</span><span>->save();   </span></span></li><li><span>        }   </span></li><li class="alt"><span>    }   </span></li><li><span>       </span></li><li class="alt"><span>    <span class="comment">//MP3Archive类  </span><span> </span></span></li><li><span>    <span class="keyword">class</span><span> MP3Archive {   </span></span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">protected</span><span> </span><span class="vars">$_mediator</span><span>;   </span></span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> __construct(MusicContainerMediator </span><span class="vars">$mediator</span><span> = NULL) {   </span></span></li><li class="alt"><span>            <span class="vars">$this</span><span>->_mediator = </span><span class="vars">$mediator</span><span>;   </span></span></li><li><span>        }   </span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> save() {   </span></span></li><li class="alt"><span>            <span class="comment">//具体实现待定  </span><span> </span></span></li><li><span>            var_dump(<span class="vars">$this</span><span>);   </span></span></li><li class="alt"><span>        }   </span></li><li><span>           </span></li><li class="alt"><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> changeBandName(</span><span class="vars">$bandname</span><span>) {   </span></span></li><li><span>            <span class="keyword">if</span><span> ( ! </span><span class="func">is_null</span><span>(</span><span class="vars">$this</span><span>->_mediator)) {   </span></span></li><li class="alt"><span>                <span class="vars">$this</span><span>->_mediator->change(</span><span class="vars">$this</span><span>, </span><span class="keyword">array</span><span>(</span><span class="string">"band"</span><span> => </span><span class="vars">$bandname</span><span>));   </span></span></li><li><span>            }   </span></li><li class="alt"><span>            <span class="vars">$this</span><span>->band = </span><span class="vars">$bandname</span><span>;   </span></span></li><li><span>            <span class="vars">$this</span><span>->save();   </span></span></li><li class="alt"><span>        }   </span></li><li><span>    }        </span></li><li class="alt"><span>    <span class="comment">//中介者类  </span><span> </span></span></li><li><span>    <span class="keyword">class</span><span> MusicContainerMediator {   </span></span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">protected</span><span> </span><span class="vars">$_containers</span><span> = </span><span class="keyword">array</span><span>();   </span></span></li><li class="alt"><span>           </span></li><li><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> __construct() {   </span></span></li><li class="alt"><span>            <span class="vars">$this</span><span>->_containers[] = </span><span class="string">"CD"</span><span>;   </span></span></li><li><span>            <span class="vars">$this</span><span>->_containers[] = </span><span class="string">"MP3Archive"</span><span>;   </span></span></li><li class="alt"><span>        }   </span></li><li><span>           </span></li><li class="alt"><span>        <span class="keyword">public</span><span> </span><span class="keyword">function</span><span> change(</span><span class="vars">$originalObject</span><span>, </span><span class="vars">$newValue</span><span>) {   </span></span></li><li><span>            <span class="vars">$title</span><span> = </span><span class="vars">$originalObject</span><span>->title;   </span></span></li><li class="alt"><span>            <span class="vars">$band</span><span>  = </span><span class="vars">$originalObject</span><span>->band;   </span></span></li><li><span>               </span></li><li class="alt"><span>            <span class="keyword">foreach</span><span> (</span><span class="vars">$this</span><span>->_containers </span><span class="keyword">as</span><span> </span><span class="vars">$container</span><span>) {   </span></span></li><li><span>                <span class="keyword">if</span><span> ( ! (</span><span class="vars">$originalObject</span><span> instanceof </span><span class="vars">$container</span><span>)) {   </span></span></li><li class="alt"><span>                    <span class="vars">$object</span><span> = </span><span class="keyword">new</span><span> </span><span class="vars">$container</span><span>;   </span></span></li><li><span>                    <span class="vars">$object</span><span>->title = </span><span class="vars">$title</span><span>;   </span></span></li><li class="alt"><span>                    <span class="vars">$object</span><span>->band  = </span><span class="vars">$band</span><span>;   </span></span></li><li><span>                       </span></li><li class="alt"><span>                    <span class="keyword">foreach</span><span> (</span><span class="vars">$newValue</span><span> </span><span class="keyword">as</span><span> </span><span class="vars">$key</span><span> => </span><span class="vars">$val</span><span>) {   </span></span></li><li><span>                        <span class="vars">$object</span><span>-></span><span class="vars">$key</span><span> = </span><span class="vars">$val</span><span>;   </span></span></li><li class="alt"><span>                    }   </span></li><li><span>                       </span></li><li class="alt"><span>                    <span class="vars">$object</span><span>->save();   </span></span></li><li><span>                }   </span></li><li class="alt"><span>            }   </span></li><li><span>        }   </span></li><li class="alt"><span>    }   </span></li><li><span>       </span></li><li class="alt"><span>    <span class="comment">//测试实例  </span><span> </span></span></li><li><span>    <span class="vars">$titleFromDB</span><span> = </span><span class="string">"Waste of a Rib"</span><span>;   </span></span></li><li class="alt"><span>    <span class="vars">$bandFromDB</span><span>  = </span><span class="string">"Never Again"</span><span>;   </span></span></li><li><span>    <span class="vars">$mediator</span><span> = </span><span class="keyword">new</span><span> MusicContainerMediator();   </span></span></li><li class="alt"><span>    <span class="vars">$cd</span><span> = </span><span class="keyword">new</span><span> CD(</span><span class="vars">$mediator</span><span>);   </span></span></li><li><span>    <span class="vars">$cd</span><span>->title = </span><span class="vars">$titleFromDB</span><span>;   </span></span></li><li class="alt"><span>    <span class="vars">$cd</span><span>->band  = </span><span class="vars">$bandFromDB</span><span>;   </span></span></li><li><span>    <span class="vars">$cd</span><span>->changeBandName(</span><span class="string">"Maybe Once More"</span><span>);   </span></span></li><li class="alt"><span>?> </span></li></ol>
登录后复制

 数据库脚本请参照:http://www.cxybl.com/html/wlbc/php/2011_1126_9458.html

电子手机配件网站源码1.0
电子手机配件网站源码1.0

电子手机配件网站源码是一个响应式的织梦网站模板,软件兼容主流浏览器,且可以在PC端和手机端中进行浏览。模板包含安装说明,并包含测试数据。本模板基于DEDECms 5.7 UTF-8设计,需要GBK版本的请自己转换。模板安装方法:1、下载最新的织梦dedecms5.7 UTF-8版本。2、解压下载的织梦安装包,得到docs和uploads两个文件夹,请将uploads里面的所有文件和文件夹上传到你的

电子手机配件网站源码1.0 0
查看详情 电子手机配件网站源码1.0



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号