说说工厂和单例

以前在 dbconfig.phpPDO 连接数据库操作,用 $db = new pdo() ,然后 model 层其他文件 include_once('dbconfig.php') 就可以使用 PDO 实例对象 $db 的各种方法和异常处理类了。

  • 其实呢,目前我完全理解的看,这样之前存在两个大问题。第一,代码停留在 php4 面向过程的水平,不是把操作写到一个文件或者函数去调用就叫面向对象!!!!这一点我现在特别感谢魏振华老师,一学期她教的几乎都是纯理念的C++面相过程,回想起来讲的非常好,特别有用。

  • 第二个问题就是,每次 include 都会 new 一个 PDO 对象,由于这种蹩脚的代码没加命名空间,即使每次实例化对象赋值给同样的变量名也可以使用。但重点在于,每次开辟空间对内存 I/O 读写影响很大,于是就有了一次结婚,终生幸福的设计模式:

  • 这里稍微说工厂模式和单例模式,请尽量保证你理解面向对象语言特性(这里的设计模式并不是针对php!!!)。

  • 刚才那个例子,不同文件里每次你要操作数据库,都要实例化一个对象,很恶心。就像每次开房都要省下几百块吃饭和打游戏的钱,我们也可以想办法去网吧去 KTV 玩玩嘛。一般我们是每次需要操作数据库就连接,工厂模式就是每次先引入配置好的 dbconfig.php ,不管你是啥后台文件,反正 model 层你基本都要和数据库搞关系,我全部都引进来再说。

  • 这样可以少写一点代码,暑假有人告诉我这就是封装代码到一个文件。我信了,确实这是封装,镜像自制还能叫封装呢!!!这个封装和面向对象的封装性其实并不是一个概念!起码 dbconfig.php 这破文件谁都能访问就不符合。然后为了防止 I/O 开销,我们引入了单例模式,这又是啥意思?

  • 举个例子吧,作为单身汪的你每周都要发泄一下,有时候去某店发泄,有时候你去网吧发泄,有时候去 KTV 发泄,都要钱都很贵啊!然后你就学会了一卡通,学校所有地方都允许你发泄,学校借给你一些东西的使用权,你还得还回去,并且你每次都要走同一条路去发泄了,这就是单例模式:创建一个唯一单例入口,有请求过来就判断单例对象是否存在,存在就返回,不存在则创建。创建是个实例化的过程,内存开销比较大,但是如果一次创建后让这个对象停留在静态存储区 static 的话,后续就可以直接获取。

在代码上理解会更方便些: configdb.php 文件里,BD class 里面有构造函数,保护属性 $db ,还有个私有方法 connectDB() ,里面实现了 new PDO 操作,return $db,但是在类外是不能直接调用私有方法滴,怎么破呢?魏老师的学生绝对能回答出来,这个做法就是单例模式,能看到这里的,请回答一下:(答案就是两个单词,共六个字母)。

  • get and set。

你可能感兴趣的:(说说工厂和单例)