php之大话设计模式-开个头

    最早认识设计模式是看博客园伍迷的大话设计模式这本书(他的另一本好本是大话数据结构,最喜欢的地方是下载的源码都能正常运行)。


    设计模式是基于 接口、封装、继承、多态这些面向对象的要素实现的。设计模式的首要目的是方便合作,也就是大家改不同的文件,但合到一起就能好好工作。比如MVC模式,前台改视图,后台改MC(我记得有一回我和一个人一个改模型文件,一个改控制文件,也没冲突),之间约定好接口就可以不打扰,虽然两个人的效率肯定达不到一个通做前后台的两倍,不过公司及客户应该更倾向于更快的交货时间,这不是传统的会计能计算的。
    
    接口就是一个约定,它并不规定怎么做,而表示一种做什么。比如坦克要有炮,当然程序里可以有没有炮的坦克,但这样你就无法给所有坦克装弹药(毕竟是五月了,所以把王垠同志(我不知道他的水平,因为我只是一个初级程序员)关于戴帽子的比喻改了下),合作就有问题。当然接口的方法什么的必须实现,如果你增加了接口的方法,可能会遇到狂加子类的情况——这是体力活,但应该可以写个代码分析程序,然后自动加子类(这种事我没做过,没遇到过这种事,代码分析估计过几年再学);如果子类不是都要这个属性,再加个新接口或许好些。
    
    封装是为了避免全局变量,因为变量是可变的,所以代码太长了的话,你将很难知道它的值及类型——如果要改全局变量,如果有中间操作,就新建临时变量来运算,最后改全局变量,改全局变量的类型,基本上是作死。另外,如果你的一个函数有几十多行,要方便维护,要么你就写子函数或用闭包,要么就要尽量避免改变变量的值。避免改变变量的值有时有点麻烦,往往会新建比较多的变量,但会很明显地降低程序的复杂度及提高可读性。
    

    继承很方便,但是不灵活,所以需要用工厂模式和策略模式来弥补。php5的面向对象有了明显的进步。比如,加了private、protected、public的限制,显然能用private就要用它,在渐渐扩大的程序中,这能减少不必要的依赖。当然,对象的变量没有特别类型或别的什么限制,不要写那么多__get,__set,还是放开的好。static这个执行效率高,但要少用,因为它的继承机制和普通的不一样,一般用在最底层不怎么需要复用的类,像Yii->app::xxxx  什么的。


    设计模式很好学,但是不好用,你需要知道在什么情况下用什么模式,什么时候不用模式好。大概的原则就是,方便合作,方便理解代码,高内聚,低隅合,按代码大全的说法,就是减少复杂度(好的程序员是短期内可以随时踢掉的那种,因为他的代码复杂度低)。另外,有的语言自带设计模式,比如Erlang,就有匹配模式,这样基本不需要工厂模式了。
    
    另外,网上有些人用php重写了伍迷写的C#代码。所以我要有所不同,偶尔会用闭包(需要5.3)加数组来模仿C的函数指针加结构体实现面向对象。

    

    我并不打算在后面的文章写很多文字,《大话设计模式》已经写很多了。我估计我现在写不了那么有趣的东西,另外希望大家要看这本书的话,还是买正版的好。

    
    
    
    
    
    
    
    
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值