Archive for 八月, 2008

Head First 设计模式: 第四课 工厂模式

简单工厂模式 (Simple Facory Pattern): 中间类(也可能是静态类) 调用实现类,面对新的实现类需要修改中间类代码 [ 开放扩展,关闭修改 ]
工厂方法模式(Factory Method Pattern): 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 [ 把创建者和产品类分开,解耦的方法,就是把行为选择权交由子类实现(超类抽象createPizza方法) ]不能让高层组建依赖低层组件,趋于依赖”抽象”。
抽象工厂模式 : 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
OO原则 – > 依赖倒置原则 ( Dependemcy Inversion Principle ) : 要依赖抽象,不要依赖具体类

变量不可以持有具体类的引用;
不要让类派生自具体类;
不要覆盖基类中已实现的方法。

工厂模式似乎在开发中应用很普遍,搜到很多工厂模式的变种; 也难怪,这个模式好理解好用,但说白了,怎么用还得看开发者自己。 仅仅记录

自定义个性”唐诗宋词”模块

通过本文你将学到 自定义”唐诗宋词”模块来实现:

每日一句拽言牛语;
随机显示一条名言警句,并安置在Blog首页的浏览器标题栏;
随机显示图片(小心,可能是我的忽悠哦);

当我开始写”唐诗宋词“之前根本没有想到要输出”唐诗300 首”,因为当时在开始接触 设计模式,所以想用PHP写个东西玩玩,当时那些默认模块(唐诗300、宋词100、增广贤文、谚语……)已经被人用shell写成conky的脚本长期定居于我的linux桌面上,那么材料就是它了。实际上这个东西写法类似于设计模式中的策略模式(Strategy), 每加一个模块,只要根据接口重写一个函数即可。最简单的莫过于显示单句了,请看下面这个例子:

Head First 设计模式: 第三课 装饰者模式

装饰者模式(Decorator),以 Starbuzz Coffe 的多风味咖啡为例。

饮料抽象类 A ;
调料抽象类 B 继承到 A ;
饮料类 C 继承 A ;
调料类 D 继承 B,并引入 A 对象;
用调料 D 装饰 B,嵌套直到需求完全;
D 可以在 C 的行为前/后加上自己的代码(行为),也可完全代替 C 的行为;

以星巴兹咖啡为例的装饰者模式定义: 动态地将责任附加到对象上。诺要扩展功能,装饰者提供了比继承更有弹性的替代方案。
OO原则:OO原则(开放 – 关闭): 对扩展开放,对修改关闭。
PS: 我不想记太多的东西,设计模式不是理解就可以的,而是实际应用中的磨砺出来的。即使用PHP重写了代码后只有3层收获,设计模式的目标就是通过子类(传入相对接口对象)调用抽象超类和接口的方法来扩展行为,而不必大量修改原有代码。刚刚接触难以理解,可马上会爱不释手。

WP插件:唐诗宋词 更新至0.2版,加入widget

昨天花了点时间,为”唐诗宋词”插件加了个 Widget (效果临时摆在本博客右侧栏的Last.fm挂件下),配置界面的11个模块一个一个加太麻烦…… 主要更新内容如下:

加入了 show_chinese_poetry 函数,可以控制刷新时间;
为插件写了个Widget;
为widget添加配置界面(截图见文章最后);

实际上2和3就是同一个,不过我无聊,呵呵。
使用说明和下载地址见”唐诗宋词”的发布页: WP插件 ─ 唐诗宋词

终于又叼上了牙签

经过两天的穷折腾终于完成了搬家工程 ── 从5栋搬会到6栋。所以现在也终于恢复叼着牙签的经典姿势,哈哈!灵感远远不绝,这种感觉就好比:在你饿极之时,有人端上一碗香喷喷的白米饭,然后告诉你,别急,还有一大盆红烧肉没上 ── 瞬入天堂。 结果就是这样,所以把插件的Widget写了,打牙签,吃猫耳朵,听 “Maximum The Hormone” 乱嚎…… OK, 兴奋完 继续学习,其实现在回头就看到”猴子”,压力不是一般的大。
简单的人写在不简单的一天结束之时,可不可以不简单?

Head First 设计模式: 第二课 观察者模式

学习了设计模式第二课:观察者模式(Observer),这是一个一对多的问题,所谓”牵一发而动全身“,主题的状态决定观察者的动作。
观察者模式 ── 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

新建主题对象 A
新建观察者 B(传入主题对象 A)

拷屁主题对象 A
注册观察者(把自个传入主题对象 A)

主题对象 A 中加入观察者 B, 依赖完成
主题状态改变 驱动 观察者动作 [push方式]
观察者动作 [pull方式]

对应接口:

主题接口 (主题对象)
观察者接口 (观察者)
外部动作接口 (观察者)

观察者利用主题接口向主题注册,而主题利用观察者接口通知观察者。 ── 松耦合

PHP5中的autoload方法

PHP5中有一方法: __autoload() , 简单的说就是类的自动加载;

当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称。

那么简单测试一下。

Head First 设计模式: 第一课PHP版鸭子

刚刚看《Head First 设计模式》,第一章讲了一个故事: 设计师Joe设计了只鸭子,但董事会(难道不是执行经理管这事)要求每六个月改变产品; 于是乎什么飞鸭、烤鸭、机器鸭、橡胶鸭……乱七八招的都来了,而且你还不知道下次是什么变态要求! 怎么办? 关于编程的方法:继承多态都无用,因为下次的代码改动量太大,并且需要改动多处原有代码。 那么怎的办!? 呵呵,在这危机时刻(Joe面临炒鱿鱼的危险),设计模式推出了两条原则:

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
针对接口编程,而不是针对实现编程。

最后奇迹出现,Joe大放异彩!
需要说的是虽然我的”唐诗宋词“插件也是使用类似于设计模式写的(以后加一个模块最少只要5行代码),但那时看的尚学堂的视频,一知半解,也就那样吧。这是我第一次看编程的书能看到这么晚,而且还把书中例子写成代码,此书可谓“头脑风暴”。~0~| 贴上PHP版的源码(看看CoolCode的极限 ^_^):

记两条去除注释的正则表达式

花了一天时间学习正则表达式,虽然以前学过一点,但“书到用时方嫌少”,囊中羞涩也是无奈。
1.这条还是好理解的,自己写时忘了加’\’这个转义字符,于是发狠:以后但凡是字符都加个’\’,就不信你丫的!

\/\*(\s|.)*?\*\/

2.网上抄来的,能力不足,看不懂。经测试两条都能删除多行’/* */’注释,用之前还是自己再测试一次的好。

/\/\/[^\n]*|\/\*([^\*^\/]*|[\*^\/*]*|[^\**\/]*)*\*\//

[原创]wordpress插件:唐诗宋词

就如你所看到的,这个唐诗宋词(chinese poem)插件默认随机显示唐诗300首、宋诗或宋词中的一首。当然了,上面的《出塞》只是图片,真实示例可以查看我的留言板。

Page 1 of 212