Archive for 八月, 2008
简单工厂模式 (Simple Facory Pattern): 中间类(也可能是静态类) 调用实现类,面对新的实现类需要修改中间类代码 [ 开放扩展,关闭修改 ]
工厂方法模式(Factory Method Pattern): 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 [ 把创建者和产品类分开,解耦的方法,就是把行为选择权交由子类实现(超类抽象createPizza方法) ]不能让高层组建依赖低层组件,趋于依赖”抽象”。
抽象工厂模式 : 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
OO原则 – > 依赖倒置原则 ( Dependemcy Inversion Principle ) : 要依赖抽象,不要依赖具体类
变量不可以持有具体类的引用;
不要让类派生自具体类;
不要覆盖基类中已实现的方法。
工厂模式似乎在开发中应用很普遍,搜到很多工厂模式的变种; 也难怪,这个模式好理解好用,但说白了,怎么用还得看开发者自己。 仅仅记录
File Under
设计模式 | 关键字:
factory,
工厂,
设计模式LD on 八月 31st, 2008 |
2 Comments
通过本文你将学到 自定义”唐诗宋词”模块来实现:
每日一句拽言牛语;
随机显示一条名言警句,并安置在Blog首页的浏览器标题栏;
随机显示图片(小心,可能是我的忽悠哦);
当我开始写”唐诗宋词“之前根本没有想到要输出”唐诗300 首”,因为当时在开始接触 设计模式,所以想用PHP写个东西玩玩,当时那些默认模块(唐诗300、宋词100、增广贤文、谚语……)已经被人用shell写成conky的脚本长期定居于我的linux桌面上,那么材料就是它了。实际上这个东西写法类似于设计模式中的策略模式(Strategy), 每加一个模块,只要根据接口重写一个函数即可。最简单的莫过于显示单句了,请看下面这个例子:
File Under
plugins | 关键字:
module,
唐诗,
宋词,
模块LD on 八月 30th, 2008 |
3 Comments
装饰者模式(Decorator),以 Starbuzz Coffe 的多风味咖啡为例。
饮料抽象类 A ;
调料抽象类 B 继承到 A ;
饮料类 C 继承 A ;
调料类 D 继承 B,并引入 A 对象;
用调料 D 装饰 B,嵌套直到需求完全;
D 可以在 C 的行为前/后加上自己的代码(行为),也可完全代替 C 的行为;
以星巴兹咖啡为例的装饰者模式定义: 动态地将责任附加到对象上。诺要扩展功能,装饰者提供了比继承更有弹性的替代方案。
OO原则:OO原则(开放 – 关闭): 对扩展开放,对修改关闭。
PS: 我不想记太多的东西,设计模式不是理解就可以的,而是实际应用中的磨砺出来的。即使用PHP重写了代码后只有3层收获,设计模式的目标就是通过子类(传入相对接口对象)调用抽象超类和接口的方法来扩展行为,而不必大量修改原有代码。刚刚接触难以理解,可马上会爱不释手。
File Under
设计模式 | 关键字:
decorator,
装饰者,
设计模式LD on 八月 30th, 2008 |
No Comments
昨天花了点时间,为”唐诗宋词”插件加了个 Widget (效果临时摆在本博客右侧栏的Last.fm挂件下),配置界面的11个模块一个一个加太麻烦…… 主要更新内容如下:
加入了 show_chinese_poetry 函数,可以控制刷新时间;
为插件写了个Widget;
为widget添加配置界面(截图见文章最后);
实际上2和3就是同一个,不过我无聊,呵呵。
使用说明和下载地址见”唐诗宋词”的发布页: WP插件 ─ 唐诗宋词
File Under
plugins | 关键字:
widget,
唐诗,
宋词LD on 八月 29th, 2008 |
1 Comment
经过两天的穷折腾终于完成了搬家工程 ── 从5栋搬会到6栋。所以现在也终于恢复叼着牙签的经典姿势,哈哈!灵感远远不绝,这种感觉就好比:在你饿极之时,有人端上一碗香喷喷的白米饭,然后告诉你,别急,还有一大盆红烧肉没上 ── 瞬入天堂。 结果就是这样,所以把插件的Widget写了,打牙签,吃猫耳朵,听 “Maximum The Hormone” 乱嚎…… OK, 兴奋完 继续学习,其实现在回头就看到”猴子”,压力不是一般的大。
简单的人写在不简单的一天结束之时,可不可以不简单?
File Under
心情札记 | 关键字:
toothpickLD on 八月 28th, 2008 |
2 Comments
学习了设计模式第二课:观察者模式(Observer),这是一个一对多的问题,所谓”牵一发而动全身“,主题的状态决定观察者的动作。
观察者模式 ── 在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
新建主题对象 A
新建观察者 B(传入主题对象 A)
拷屁主题对象 A
注册观察者(把自个传入主题对象 A)
主题对象 A 中加入观察者 B, 依赖完成
主题状态改变 驱动 观察者动作 [push方式]
观察者动作 [pull方式]
对应接口:
主题接口 (主题对象)
观察者接口 (观察者)
外部动作接口 (观察者)
观察者利用主题接口向主题注册,而主题利用观察者接口通知观察者。 ── 松耦合
File Under
设计模式 | 关键字:
OOP,
observer,
设计模式LD on 八月 26th, 2008 |
No Comments
PHP5中有一方法: __autoload() , 简单的说就是类的自动加载;
当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称。
那么简单测试一下。
File Under
PHP | 关键字:
autoload,
phpLD on 八月 26th, 2008 |
No Comments
刚刚看《Head First 设计模式》,第一章讲了一个故事: 设计师Joe设计了只鸭子,但董事会(难道不是执行经理管这事)要求每六个月改变产品; 于是乎什么飞鸭、烤鸭、机器鸭、橡胶鸭……乱七八招的都来了,而且你还不知道下次是什么变态要求! 怎么办? 关于编程的方法:继承多态都无用,因为下次的代码改动量太大,并且需要改动多处原有代码。 那么怎的办!? 呵呵,在这危机时刻(Joe面临炒鱿鱼的危险),设计模式推出了两条原则:
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
针对接口编程,而不是针对实现编程。
最后奇迹出现,Joe大放异彩!
需要说的是虽然我的”唐诗宋词“插件也是使用类似于设计模式写的(以后加一个模块最少只要5行代码),但那时看的尚学堂的视频,一知半解,也就那样吧。这是我第一次看编程的书能看到这么晚,而且还把书中例子写成代码,此书可谓“头脑风暴”。~0~| 贴上PHP版的源码(看看CoolCode的极限 ^_^):
File Under
设计模式 | 关键字:
duck,
php,
设计模式LD on 八月 25th, 2008 |
2 Comments
花了一天时间学习正则表达式,虽然以前学过一点,但“书到用时方嫌少”,囊中羞涩也是无奈。
1.这条还是好理解的,自己写时忘了加’\’这个转义字符,于是发狠:以后但凡是字符都加个’\’,就不信你丫的!
\/\*(\s|.)*?\*\/
2.网上抄来的,能力不足,看不懂。经测试两条都能删除多行’/* */’注释,用之前还是自己再测试一次的好。
/\/\/[^\n]*|\/\*([^\*^\/]*|[\*^\/*]*|[^\**\/]*)*\*\//
File Under
PHP | 关键字:
regex,
正则表达式LD on 八月 24th, 2008 |
5 Comments
就如你所看到的,这个唐诗宋词(chinese poem)插件默认随机显示唐诗300首、宋诗或宋词中的一首。当然了,上面的《出塞》只是图片,真实示例可以查看我的留言板。
File Under
plugins | 关键字:
plugins,
wordpress,
唐诗,
宋词LD on 八月 22nd, 2008 |
27 Comments