怪谈“观察者模式”

对于代码的设计模式,我用的不多,又不甘心说自己是乱说,所以只能取个“怪谈”的名字。

观察者—我对这个名字充满了好感,如果你也像我一样,对这个名字多念了几次,就能读出世态炎凉人情冷暖的味道来。

所谓观察者模式,就是“冷眼旁观”的写程序,我在一旁盯着,老板说这个功能不要了,那好,我撤销一个观察者;过了一些时日,老板又说,你再加个功能,很简单,我再加一个观察者。在这样的情况下,无论老板怎么虐我,我都能快速的组织代码,实现功能。

不过大家不要误会,我拿老板做例子,不是总是树立雇佣双方的矛盾,在实际开发中,需求改变在所难免。

观察者模式的代码实现具体是怎样的呢?

abstract class Observer { abstract function update(); } class Observer1 extends Observer { public function update(){ echo “我是第一个观察者<br>”; } } class Observer2 extends Observer { public function update() { echo “我是第二个观察者<br>”; } } class Eventer { private $observers = array(); public function addObserver($observer){ $this->observers[] = $observer; } public function trigger(){ foreach ($this->observers as $observer) { $observer->update(); } } } $eventer = new Eventer(); $eventer->addObserver(new Observer1()); $eventer->addObserver(new Observer2()); $eventer->trigger();

上面的代码串的意思是使用了一个叫做“Eventer”的观察者类,来管理继承了“Observer”这个父类的类,通过Eventer观察者来处理操作监听Observer类的状态,反正思想大致如此,具体实现随便玩。

有时,我为了强用设计模式,甚至写出这样的代码来记录一个日志:

interface Observer { public function addLog(); } class LogObserver implements Observer{ private $file_path = “./error.log”; private $message; private $special_message; public function __construct($special_message) { $this->message = date(“Y-m-d H:i:s”).”===”; $this->special_message = $special_message.PHP_EOL; } public function addLog() { error_log($this->message.$this->special_message,3,$this->file_path); } } class LogMaster{ function __construct(Observer $observer) { $observer->addLog(); } } new LogMaster(new LogObserver(‘log info’));

有人说,上班久了,无聊了,要开始炫技了。

四点记录

没看过什么书,没什么工作经验,浅谈。 我想团队协作的基本原则是沟通顺利和互不影响各方的工作,如此一来就会面对工作同步或者滞后的问题。

刚刚开始没有经验的团队,一般流程是出设计稿、编码、测试,甚至是出设计稿、编码、出设计稿、改码、出设计稿……,永远不知道什么时候是测试时间,有一天老板心血来潮要体验产品,结果一堆bug,产品实现人员被骂得狗血淋头。 好像一开始就扯远了文不对题了,好,开始数点。 1.前后端如何配合 前后端的配合主要是数据获取和操作的问题。一般的做法的是各方自己写自己的,前端需求有了问题或者API调用不对头,后端改一下。很明显,这样并不好,会导致沟通成本增加(不要太简单的理解沟通成本)。 既然这样有问题,你可能会问那前后端在工作开始就确定API的调用接口不就好了?这样其实是没有什么用的,因为你还没有进行编码工作,你对这个产品并不了解或者细节了解的不深,双方的沟通是没有深度和不清晰的,即使一开始沟通了,后来还是再次沟通。

前端其实一开始不需要数据,可以自己模拟一些数据来实现界面设计的实现,这个时候后端编码人员也在同步进行API设计。

界面快要完成了,前端和后端编码人员进行API的核对和商讨,这个时候,编码人员对整体的架构都有清晰的认识,沟通就比较高效。

工作上也谁都不耽搁。 我这么说不是否定沟通,而是如何进行高效沟通。

2.面向对象编程如何设计你的类 在数据驱动的产品中,用户的所有的操作都是操作他的数据,一个类的设计也应该围绕数据操作来进行,如果有一个user表,那你的代码肯定也有一个user模型,围绕增删改查来组织你的代码,无论你的c层的逻辑如何,m层的代码实现也不会受影响。 这样的好处是m层和c层的代码耦合度很低,以后改起来很方便。以前写代码没有经验,写了很多难维护的代码,也不优雅。 3.作为一个编码人员的基本素养是什么 在目前,我只能简单的理解为你要对你的代码负责,负责包括写好注释,测试代码的功能和使用流程。

当然,我也问过很多人这个问题,他们都说不知道,这个问题了太难了。反过来想,有答案不见得是好事,追求答案的状态才是重要的。

一个编码人员在不同阶段对素养的理解和追求应该也是变化的。

只能说,我要做一个有职业素养的人。 4.2015的总结 上了半年班,可能是人生最后的寒暑假没有了,我心里很不情愿,我还没有做好心理准备,lol还没有上大师,心有不甘。

但是我是适应能力很强的人,所以没有上的大师以后再上。 说到最后都是感谢。如果有两个关键字的话,我想一个是拒绝一个是迎合,无论我得到的是拒绝还是迎合,我都学到很多东西,特别是那些我去实现和追求某些东西能开导我的道理,感谢你们。