首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

温习PHP设计模式

11 代理模式

问题:
      你怎样才能在不直接操作对象的情况下,对此对象进行访问?


解决方案
      代理模式是给某一个对象提供一个替代者(占位者),使之在client对象和subject对象之间编码更有效率。代理可以提供延迟实例化(lazy instantiation),控制访问, 等等,包括只在调用中传递。 一个处理纯本地资源的代理有时被称作虚拟代理。远程服务的代理常常称为远程代理。强制控制访问的代理称为保护代理。


理的本质是用一个实例化变量对subject对象进行引用,通过调用代理类的方法操作subject类。
让我们看一个代理模式的最简单形态,首先,你需要创建一个subject类用于代理。



// PHP4
class Subject {
function someMethod() {
sleep(1); //do something
}
}


      下一步,你需要一个代理类,这个类需要实例化subject类用于代理。


class ProxySubject {
var $subject;
function ProxySubject() {
$this->subject =& new Subject;
}
}


      在上面的ProxySubject类,在构造器中创建了subject对象(还有其他的可供选择的方法,比如通过传递一个参数给构造器或者用工厂创建subject对象,这些都是同样可行的)。

      最后,你的代理类提供所有公有的方法必须让subject类支持。在这个案例上, someMethod()就是这样一个方法。


class ProxySubject {
var $subject;
function ProxySubject() {
$this->subject =& new Subject;
}
function someMethod() {
$this->subject->someMethod();
}
}


      ProxySubject类通过$this->subject->someMethod()才真正的调用Subject类。
代理既可以有一些方法直接调用,又可以在调用之前使用一些附加逻辑(延迟加载,监视)。
昵称: 逆雪寒  时间: 2007-12-17 09:38:00
...........你真能理解设计模式的好处与坏处么?
反正我是理解不了。。。
我感觉对模式的把握是建立在大量以及长期的编程基础上的,只有在这种基础上,才能知道各个模式之间的利弊。
昵称: Phzzy  时间: 2007-12-17 10:44:00
恩设计模式万变不离其中。就好比学武功。只要记得心法再加上自己的悟性。那么招数是千变万化的。那些23个架势不过是给你思路的一个参考原形而已。我也只是看看。只要记得心法就好: 模块间的耦合性越弱越好。就这么简单。
昵称: 逆雪寒  时间: 2007-12-17 11:34:00
=.=|| 反正我看不懂,呵呵
昵称: Phzzy  时间: 2007-12-17 11:51:00
   我也是不懂装懂。哈哈。装下装一下
昵称: 逆雪寒  时间: 2007-12-17 12:10:00
如果不知道模式存在的意义..还是不要随便使用了..
每种模式的存在都是为了实现面向对象设计的那几个基本原则和目标.
这样类似的用代理将请求转发的方式某种程度上来说是让系统支持迪米特法则.遵循最小知识原则,从而降低模块之间的耦合度.
昵称: 玉面修罗  时间: 2007-12-19 09:31:00
我认为php中大量使用设计模式开发程序并不是最好的选择,主要原因在于php通常项目的业务流程大都不是很复杂。

一般情况下开发php程序可能首先想到的是MVC模式分离前端,事实上做到这一步就已经可以了,而业务逻辑则通常存在于Model和Controller内,这种设计其实不好,实际上设计模式用得最多的地方应该在业务逻辑,但由于业务逻辑简单以及效率考量,没多少人去把业务这一层分离出来独自写成组件模块,这其中还有一个原因在于:php是纯解释性的没有容器支持,因此对象生命周期仅限于请求(request)如果大量使用对象操作无疑很浪费资源
昵称: fnet  时间: 2007-12-19 10:23:00
顶楼上这句
因此对象生命周期仅限于请求(request),如果大量使用对象操作无疑很浪费资源。
昵称: Phzzy  时间: 2007-12-19 10:32:00
挺好
昵称: phpzb  时间: 2007-12-19 11:10:00
引用:
原帖由 fnet 于 2007-12-19 10:23 发表
我认为php中大量使用设计模式开发程序并不是最好的选择,主要原因在于php通常项目的业务流程大都不是很复杂。

一般情况下开发php程序可能首先想到的是MVC模式分离前端,事实上做到这一步就已经可以了,而业务逻辑 ...
MVC是结构模式,良好的MVC的设计是由大量的行为模式和创建模式共同组织在一起形成的.
所以要做好MVC还是免不了使用多种设计模式.
对于高PV的站点,当然还是谨慎使用面向对象方案.
对于网站系统的后台管理,企业ERP这类业务流程复杂,访问量小的软件一般都不需要太担心效率或则资源问题.
昵称: 玉面修罗  时间: 2007-12-19 11:29:00
MVC 不一定要用面向对象的方案啊,只要思想相同就可以了撒
单一入口,模块由控制器调度,各个模块实现不同业务
昵称: Phzzy  时间: 2007-12-19 11:35:00
顶.一看就知道这个兄弟学JAVA出来的. 的确是浪费资源.不过PHP + memcached 的话.那可能就好很多了

现在很迷茫不知道  继续深入学PHP 呢还是转学JAVA.  

PHP工资那么低  奶奶的
昵称: 逆雪寒  时间: 2007-12-19 11:36:00
以前我也想过这个问题,但后来想明白了两点:

如果单从工资考虑,JAVA工资也不好到哪儿去,除非去大型外资企业,那样要求也不低。

如果从技术考虑,无所谓,什么好就学什么,学无止境,到什么时候下什么棋,灵活多变。
昵称: fnet  时间: 2007-12-19 11:47:00
也不是.因为如果深入学PHP的话.基本没时间学JAVA了.我毕竟只想精通一门.所以才出现这个矛盾.

JAVA 相对能开发的面比较广.相对难度大.工资相对来说还是高点的.

PHP的话.一般的工资不会高.   除非真能独当一面.那么到那个时候的话.我也不知道自己多大了

所以挺迷茫的现在
昵称: 逆雪寒  时间: 2007-12-19 11:51:00
其实两者可以促进的。工资来说,就上海这里来看,除非你有关系,学历高,再加上多年工作经验,工资才高。

嘿嘿,一切开心就好。
昵称: fnet  时间: 2007-12-19 12:10:00
  也只能安慰自己一切开心就好了.  不能强求了
昵称: 逆雪寒  时间: 2007-12-19 12:13:00
学习中,对这个主题,也是不理解
昵称: alcupt  时间: 2007-12-19 13:05:00
学习设计模式,关键是理解怎么用、什么场合用。
昵称: luzhou  时间: 2007-12-22 07:00:00
引用:
原帖由 逆雪寒 于 2007-12-19 11:51 发表
也不是.因为如果深入学PHP的话.基本没时间学JAVA了.我毕竟只想精通一门.所以才出现这个矛盾.

JAVA 相对能开发的面比较广.相对难度大.工资相对来说还是高点的.

PHP的话.一般的工资不会高.   除非真能独当一面.那 ...
最近挺郁闷,想深入php的oo,发现没有这方面的资料,市面上的书都是超easy的,无非最后来个留言板,一本书就算大功告成了。包括一些人奉为php圣经的那本书,我看不咋地,“继承”竟然一言带过。php手册也一样!
看看C/C++/java的经典书籍真是羡慕!这说明php世界级的高级玩家少。就连一本译作《javascript高级编程》的书,把oo都讲得很细,很经典。
昵称: flynetcn  时间: 2007-12-24 09:28:00
引用:
原帖由 flynetcn 于 2007-12-24 09:28 发表

最近挺郁闷,想深入php的oo,发现没有这方面的资料,市面上的书都是超easy的,无非最后来个留言板,一本书就算大功告成了。包括一些人奉为php圣经的那本书,我看不咋地,“继承”竟然一言带过。php手册也一样!
看 ...


证明什么? 证明 PHP 原本就不适合 大规模 OO。PHP 有 自己的 开发 方式,PHP中的类就是用来封装功能的。
昵称: fnet  时间: 2007-12-24 09:50:00
喜欢OO的PHPER,建议看看ZF的代码...
昵称: 玉面修罗  时间: 2007-12-24 13:02:00
引用:
原帖由 fnet 于 2007-12-24 09:50 发表

证明什么? 证明 PHP 原本就不适合 大规模 OO。PHP 有 自己的 开发 方式,PHP中的类就是用来封装功能的。
既然不适合OO,真不明白php的复杂性在哪里?if else?
phper指望什末拿高薪?
昵称: flynetcn  时间: 2007-12-25 10:06:00
我一直坚持在PHP的OOP设计...
就算没有路也要踏出一条路来..
昵称: 玉面修罗  时间: 2007-12-25 10:34:00
呵呵,楼上好样的!
其实,zend也是这样想的。
昵称: flynetcn  时间: 2007-12-25 11:27:00
引用:
原帖由 flynetcn 于 2007-12-25 10:06 发表

既然不适合OO,真不明白php的复杂性在哪里?if else?
phper指望什末拿高薪?
PHP没有最复杂的,我所见到的PHPer很多都去做服务器优化,系统优化,以及一些c/shell之类的程序,PHP做的已经不多了。

当然也有很多人去接单或者做大量的javascript。
昵称: fnet  时间: 2007-12-25 12:22:00
引用:
原帖由 fnet 于 2007-12-25 12:22 发表

PHP没有最复杂的,我所见到的PHPer很多都去做服务器优化,系统优化,以及一些c/shell之类的程序,PHP做的已经不多了。

当然也有很多人去接单或者做大量的javascript。
呵呵,有道理,应该是事实。看来高处不胜寒呀。
昵称: flynetcn  时间: 2007-12-25 12:48:00