温习PHP设计模式
时间:2007-12-17
来源:互联网
问题:
你怎样才能在不直接操作对象的情况下,对此对象进行访问?
解决方案
代理模式是给某一个对象提供一个替代者(占位者),使之在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
反正我是理解不了。。。
我感觉对模式的把握是建立在大量以及长期的编程基础上的,只有在这种基础上,才能知道各个模式之间的利弊。
作者: Phzzy 发布时间: 2007-12-17

作者: 逆雪寒 发布时间: 2007-12-17
作者: Phzzy 发布时间: 2007-12-17

作者: 逆雪寒 发布时间: 2007-12-17
每种模式的存在都是为了实现面向对象设计的那几个基本原则和目标.
这样类似的用代理将请求转发的方式某种程度上来说是让系统支持迪米特法则.遵循最小知识原则,从而降低模块之间的耦合度.
作者: 玉面修罗 发布时间: 2007-12-19
一般情况下开发php程序可能首先想到的是MVC模式分离前端,事实上做到这一步就已经可以了,而业务逻辑则通常存在于Model和Controller内,这种设计其实不好,实际上设计模式用得最多的地方应该在业务逻辑,但由于业务逻辑简单以及效率考量,没多少人去把业务这一层分离出来独自写成组件模块,这其中还有一个原因在于:php是纯解释性的,没有容器支持,因此对象生命周期仅限于请求(request),如果大量使用对象操作无疑很浪费资源。
作者: fnet 发布时间: 2007-12-19
因此对象生命周期仅限于请求(request),如果大量使用对象操作无疑很浪费资源。
作者: Phzzy 发布时间: 2007-12-19
作者: phpzb 发布时间: 2007-12-19
引用:
原帖由 fnet 于 2007-12-19 10:23 发表我认为php中大量使用设计模式开发程序并不是最好的选择,主要原因在于php通常项目的业务流程大都不是很复杂。
一般情况下开发php程序可能首先想到的是MVC模式分离前端,事实上做到这一步就已经可以了,而业务逻辑 ...
所以要做好MVC还是免不了使用多种设计模式.
对于高PV的站点,当然还是谨慎使用面向对象方案.
对于网站系统的后台管理,企业ERP这类业务流程复杂,访问量小的软件一般都不需要太担心效率或则资源问题.
作者: 玉面修罗 发布时间: 2007-12-19
单一入口,模块由控制器调度,各个模块实现不同业务
作者: Phzzy 发布时间: 2007-12-19

PHP工资那么低 奶奶的
作者: 逆雪寒 发布时间: 2007-12-19
如果单从工资考虑,JAVA工资也不好到哪儿去,除非去大型外资企业,那样要求也不低。
如果从技术考虑,无所谓,什么好就学什么,学无止境,到什么时候下什么棋,灵活多变。
作者: fnet 发布时间: 2007-12-19
JAVA 相对能开发的面比较广.相对难度大.工资相对来说还是高点的.
PHP的话.一般的工资不会高. 除非真能独当一面.那么到那个时候的话.我也不知道自己多大了

所以挺迷茫的现在
作者: 逆雪寒 发布时间: 2007-12-19
嘿嘿,一切开心就好。
作者: fnet 发布时间: 2007-12-19

作者: 逆雪寒 发布时间: 2007-12-19
作者: alcupt 发布时间: 2007-12-19

作者: luzhou 发布时间: 2007-12-22
引用:
原帖由 逆雪寒 于 2007-12-19 11:51 发表也不是.因为如果深入学PHP的话.基本没时间学JAVA了.我毕竟只想精通一门.所以才出现这个矛盾.
JAVA 相对能开发的面比较广.相对难度大.工资相对来说还是高点的.
PHP的话.一般的工资不会高. 除非真能独当一面.那 ...
看看C/C++/java的经典书籍真是羡慕!这说明php世界级的高级玩家少。就连一本译作《javascript高级编程》的书,把oo都讲得很细,很经典。
作者: flynetcn 发布时间: 2007-12-24
引用:
原帖由 flynetcn 于 2007-12-24 09:28 发表最近挺郁闷,想深入php的oo,发现没有这方面的资料,市面上的书都是超easy的,无非最后来个留言板,一本书就算大功告成了。包括一些人奉为php圣经的那本书,我看不咋地,“继承”竟然一言带过。php手册也一样!
看 ...
证明什么? 证明 PHP 原本就不适合 大规模 OO。PHP 有 自己的 开发 方式,PHP中的类就是用来封装功能的。
作者: fnet 发布时间: 2007-12-24
作者: 玉面修罗 发布时间: 2007-12-24
引用:
原帖由 fnet 于 2007-12-24 09:50 发表证明什么? 证明 PHP 原本就不适合 大规模 OO。PHP 有 自己的 开发 方式,PHP中的类就是用来封装功能的。
phper指望什末拿高薪?
作者: flynetcn 发布时间: 2007-12-25
就算没有路也要踏出一条路来..
作者: 玉面修罗 发布时间: 2007-12-25
其实,zend也是这样想的。
作者: flynetcn 发布时间: 2007-12-25
引用:
原帖由 flynetcn 于 2007-12-25 10:06 发表既然不适合OO,真不明白php的复杂性在哪里?if else?
phper指望什末拿高薪?
当然也有很多人去接单或者做大量的javascript。
作者: fnet 发布时间: 2007-12-25
引用:
原帖由 fnet 于 2007-12-25 12:22 发表PHP没有最复杂的,我所见到的PHPer很多都去做服务器优化,系统优化,以及一些c/shell之类的程序,PHP做的已经不多了。
当然也有很多人去接单或者做大量的javascript。
作者: flynetcn 发布时间: 2007-12-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28