在zend framework中存在很多优美的设计,其中也就包含了大量的设计模式,与其看一些设计模式的理论概念,还不如自己动手到zend framework或者其他优秀的oop程序中去体验一把。
Zend_Feed就是典型的builder(建造者模式)
首先解释一下建造者模式:
比如建一座大厦,设计工程已经完成,所以他可以由不同的工程对来完成,最后得到的就是一座大厦而已
。和factory工厂模式的区别就是factory只是提供给你一些工具,比如不同的,零散的,不同分工的工程
队,所以需要你自己来指挥工程队如何完成这座大厦,而builder已经是一个完整的工程队,只需由它来
建造大厦就可以了,你只需等竣工后使用就行了。
接下来用zend feed来演示这个比喻:
以下代码都是简化过的。
1 2 3 4 5 6
| interface Zend_Feed_Builder_Interface { public function getHeader(); public function getEntries(); }
|
这个就是设计图纸,图纸上规定了这个大厦必须建造什么东西;
接下来就是工程队了,zend的官方工程队:
1 2 3 4 5 6
| class Zend_Feed_Builder implements Zend_Feed_Builder_Interface { public function getHeader(); public function getEntries(); }
|
有了工程队你就可以使用它来建大厦了:
1 2
| require_once 'Zend/Feed/Builder.php'; $atom = new Zend_Feed_Atom(null, null, new Zend_Feed_Builder($data));
|
也就是说工程队建好了后你可以由feed atom来使用了,关键是你可以换不同的工程队:
1 2 3 4 5 6
| class My_Feed_Builder implements Zend_Feed_Builder_Interface { public function getHeader(); public function getEntries(); }
|
然后你可以随时更换另外一个工程队或者两个都用:
1 2 3 4 5
| require_once 'Zend/Feed/Builder.php'; $atom = new Zend_Feed_Atom(null, null, new Zend_Feed_Builder($data)); require_once 'My/Feed/Builder.php'; $atom = new Zend_Feed_Atom(null, null, new My_Feed_Builder($data));
|
用的人没有变,只需指定不同的工程队而已,这样的模式可以方便你对“建造过程”的工程队很好的控制,而建出来的大厦都是一样的。