Zend Framework Builder建造者模式

2010-03-22 1:52 pm

在zend framework中存在很多优美的设计,其中也就包含了大量的设计模式,与其看一些设计模式的理论概念,还不如自己动手到zend framework或者其他优秀的oop程序中去体验一把。

Zend_Feed就是典型的builder(建造者模式)
首先解释一下建造者模式:
比如建一座大厦,设计工程已经完成,所以他可以由不同的工程对来完成,最后得到的就是一座大厦而已

。和factory工厂模式的区别就是factory只是提供给你一些工具,比如不同的,零散的,不同分工的工程

队,所以需要你自己来指挥工程队如何完成这座大厦,而builder已经是一个完整的工程队,只需由它来

建造大厦就可以了,你只需等竣工后使用就行了。
接下来用zend feed来演示这个比喻:
以下代码都是简化过的。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  1. interface Zend_Feed_Builder_Interface
  2. {
  3. public function getHeader();
  4.  
  5. public function getEntries();
  6. }

这个就是设计图纸,图纸上规定了这个大厦必须建造什么东西;
接下来就是工程队了,zend的官方工程队:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  1. class Zend_Feed_Builder implements Zend_Feed_Builder_Interface
  2. {
  3. public function getHeader();
  4.  
  5. public function getEntries();
  6. }

有了工程队你就可以使用它来建大厦了:

  1. 1
  2. 2
  1. require_once 'Zend/Feed/Builder.php';
  2. $atom = new Zend_Feed_Atom(null, null, new Zend_Feed_Builder($data));

也就是说工程队建好了后你可以由feed atom来使用了,关键是你可以换不同的工程队:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  1. class My_Feed_Builder implements Zend_Feed_Builder_Interface
  2. {
  3. public function getHeader();
  4.  
  5. public function getEntries();
  6. }

然后你可以随时更换另外一个工程队或者两个都用:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  1. require_once 'Zend/Feed/Builder.php';
  2. $atom = new Zend_Feed_Atom(null, null, new Zend_Feed_Builder($data));
  3.  
  4. require_once 'My/Feed/Builder.php';
  5. $atom = new Zend_Feed_Atom(null, null, new My_Feed_Builder($data));

用的人没有变,只需指定不同的工程队而已,这样的模式可以方便你对“建造过程”的工程队很好的控制,而建出来的大厦都是一样的。

推荐(0)
收藏

zend framwork 发多封邮件

2009-08-26 2:59 pm

其实发多封邮件不必循环发送,只需抄送即可,我的zend framework版本为1.9

代码如下:


$to = '3@360.cn';
$cc = array('1@360.cn', '2@360.cn');
require_once 'Zend/Mail.php';

// Create transport
require_once 'Zend/Mail/Transport/Smtp.php';
$config = array('auth' => 'login',
'username' => '×××××',
'password' => '×××××');

$transport = new Zend_Mail_Transport_Smtp('smtp.sina.com', $config);

// Loop through messages
$mail = new Zend_Mail();

$mail->addTo("$to");

foreach ($cc as $v) {
     $mail->addCc("$v");
}

$mail->setFrom('×××××@sina.com', 'error reporting robot');
$mail->setSubject('错误日志');
$mail->setBodyHtml("$content", 'GBK');
$mail->send($transport);
推荐(0)
收藏