前段时间看到有人用魔兽来解释设计模式.docVIP

前段时间看到有人用魔兽来解释设计模式.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用标准 精彩文档 使市场 前段时间看到有人用魔兽来解释设计模式,感觉很有意思,于是我把它改了改,又添加了些设计模式内容,今天发出来。有些地方借鉴了前人的内容,没有注明,请前人不要见怪啊。 这里用大家感兴趣的魔兽3来讨论PHP的几种常见的设计模式:单件模式、策略模式、工厂模式、观察者模式。今天就讲这四个吧,以后继续。 这些设计模式,都是针对面向对象来说的,所以都用PHP5,另外在这里我想说的是PHP4从2008年8月8日(我记得是和北京奥运会同一天,没查证,呵呵)的时候官方就发了最后一个PHP4的补丁,这意味这PHP4的时代已经终结,所以,我建议大家现在就别理PHP4吧,就以PHP5来说吧。 一、单件模式: 问题的提出: 某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。 问题的解决: 那么下面我们就开始玩魔兽吧。首先双击war3.exe,这时候就开始运行魔兽了。我们用代码来实现吧。 ?php class War3 { public function __construct() { echo War3 is Running.,br /; } } $war = new War3(); 运行!很好,输出 War3 is Running. 我们已经可以开始游戏了,但是,如果我在代码末尾再加入 $war2 = new War3(); $war3 = new War3(); 会怎么样呢?我们试试,输出结果: War3 is Running. War3 is Running. War3 is Running. 完了,如果不小心双击了两次就开了3个魔兽,那如果再双击几次,那电脑肯定爆掉。。。我们还是来想想解决方法吧。 既然我们不能这么随意的就把这个类实例化了,那么我们就把构造函数改成私有方法。 class War3 { private function __construct() { echo War3 is Running.,br /; } } 可是私有变量外部是无法访问的,这样以来,我们就连一个都打不开了啊。别急,我们再给他加一个不用通过实例化,外部也能访问的函数,那就是静态函数, class War3 { private function __construct() { echo War3 is Running.,br /; } public static function runWar() { } } 通过这个静态的方法runWar()我们来控制类War3的实例化,那么还缺上一个标识,我们再创建一个标识,通过这个标识来表示我们的类是否已经实例化,如果实例化,直接返回句柄就行了。 把类修改成 class War3 { protected static $_instance = null; private function __construct() { echo War3 is Running.,br /; } public static function runWar() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } } 当然,我们运行魔兽时的实例化也要换种方法,就通过 $war = War3::runWar(); 就能开始玩魔兽了,好了,下面把完整的代码附上来: ?php class War3 { protected static $_instance = null; private function __construct() { echo War3 is Running.,br /; } public static function runWar() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } } $war = War3::runWar(); $war2 = War3::runWar(); $war3 = War3::runWar(); 运行一下,结果是: War3 is Running. 太好了,我双击了这么多次,也就只运行了一个魔兽,现在随便你怎么打开,机子都不会爆掉了。 这就是传说中的单价模式,主要用于一些很占资源的而且实例仅有一个实例就够用的东西,比如,zend framework中的Zend_Controller_Front前端控制器,就是采用单价模式来设

文档评论(0)

linlin921 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档