14.单元素模式
刚刚完成公司的任务,就把单元素模式先熟悉一下。昨晚学的代理模式和网络和数据库开发关系比较大,今天的单元素模式也叫单例模式,也是和这块作用比较紧密。就像你要去菜市场买菜,你只需要第一次买个篮子就可以了,后面就不需要再买篮子了。在业务开发中,也经常会遇到这种需要重复利用的对象,如果多次实例化肯定会产生很多垃圾,影响服务器性能,那么使用单例模式则可以很好的解决。
参考项目模块:邮件模块
其实单例模式用的最多的可能是数据库模块以及商品购物车等,但是邮件模块也是可以用的,基本上任何对象你只需要存在一个对象就可以了的都可以用。这里螃蟹就简单模拟一个单例模式实现的邮件发送模块。
邮件配置对象:
<?php
class MailConfig{
protected static $_instance = NULL;
protected $_handle;
protected static $_nums=0; //计数器
public static function createInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
protected function __construct(){
$this->_handle = '<br>邮件SMTP服务器:xxx@xx.com;user=xxx@xx.com;username=pangxie;password=pangxie';
self::$_nums++;
}
public function send(Mail $mail_data){
echo '<br>'.$this->_handle;
echo '<h3>邮件内容</h3>';
echo '标题:'.$mail_data->title;
echo '<br>地址:'.$mail_data->to_address;
echo '<br>内容:'.$mail_data->content;
echo '<br>实例化次数'.self::$_nums;
}
}
?>
邮件对象类:Mail.class.php
<?php
require_once('Mail.config.php');
class Mail{
public $title = '';
public $content = '';
public $to_address = '';
public function __construct($mail_data){
$this->title = $mail_data['title'];
$this->content = $mail_data['content'];
$this->to_address = $mail_data['to_address'];
}
public function send(){
$mail_instance = MailConfig::createInstance();
$mail_instance->send($this);
}
}
?>
<?php
require('Mail.class.php');
//测试邮件
$mails = array();
$mails[0] = array('title'=>'欢迎注册好书淘','content'=>'您是好书淘第109位会员,请先验证,祝您生活愉快','to_address'=>'312493732@qq.com');
$mails[1] = array('title'=>'恭喜您正式成为好书淘VIP','content'=>'美好生活从此开始','to_address'=>'312493732@qq.com');
//循环发送
foreach ($mails as $mail_data){
$mailobj = new Mail($mail_data);
$mailobj->send();
}
?>
邮件SMTP服务器:xxx@xx.com;user=xxx@xx.com;username=pangxie;password=pangxie
邮件内容
标题:欢迎注册好书淘
地址:312493732@qq.com
内容:您是好书淘第109位会员,请先验证,祝您生活愉快
实例化次数1
邮件SMTP服务器:xxx@xx.com;user=xxx@xx.com;username=pangxie;password=pangxie
邮件内容
标题:恭喜您正式成为好书淘VIP
地址:312493732@qq.com
内容:美好生活从此开始
实例化次数1