螃蟹学PHP设计模式之解释器模式

8.解释器模式

今天又迟到了一个小时,不过现在基本任务都做完了,螃蟹的效率还是挺高的。昨天一天跑各个工商局,发现大学生创业的扶持真是太少了,还是写代码比较顺心。越学到后面,就越需要理解和区别不同的设计模式,螃蟹也会多回顾前面学过的设计模式。离吃饭还有一个多钟头,就把解释器模式搞定。这个应该很好理解就是解释,就像你买了一辆车,你向朋友从各个方面介绍。解释器模式应该用的最多的就是模板了,从数据库取出的数据对象不能直接输出,需要组装成特定内容后输出,这个与装饰器模式不一样,装饰器模式更多的是对对象的属性和方法进行转换处理,而解释器模式,更多的是把一个或多个变量渲染到内容,内容一般是HTML或XML或其他文本格式,便于前台展现。

参考项目模块:邮件系统

螃蟹发现解释器用的相当多,像邮件系统,消息系统,订单系统,购物车系统等等几百年都用到了,各个模板引擎也都是例子。这里螃蟹就以之前项目中做过的邮件系统为例,深入学习解释器模式的特点。

邮件定义类:Mail.class.php

<?php 
class Mail{
	protected $_from_username = '螃蟹';
	protected $_from_address = '[email protected]';
	protected $_from_pwd = '********';
	public $_title = null;
	public $_content = null;
	public $_to_address = null;
	
	/**
	 * @param string $_from_username
	 */
	public function setFrom_username($_from_username) {
		$this->_from_username = $_from_username;
	}

	/**
	 * @param string $_from_address
	 */
	public function setFrom_address($_from_address) {
		$this->_from_address = $_from_address;
	}

	/**
	 * @param string $_from_pwd
	 */
	public function setFrom_pwd($_from_pwd) {
		$this->_from_pwd = $_from_pwd;
	}

	/**
	 * 发送邮件
	 */
	public function send(){
		/**
		 * 实际调用邮件发送方法,以及数据库记录	
	 	*/
		echo '标题:'.$this->_title;
		echo '<br>内容:'.$this->_content;
		echo '<br>收件人:'.$this->_to_address;
	}
}
?>



邮件解释器类:MailInterpreter.class.php
<?php 
require('Mail.class.php');
class MainInterpreter{
	private   $_mail = null;
	function __construct($mail){
		$this->_mail = new Mail();
		$this->_mail->_to_address = $mail['to_address'];
		$this->$mail['type']($mail);
	}
	
	public function getMail(){
		return $this->_mail;
	}
	
	private function register($mail){
		$this->_mail->_title = '恭喜您注册成功,请完成注册';
		$this->_mail->_content = '尊敬的会员<strong>'.$mail['username'].'</strong>您好,恭喜您在本网站注册成功,请点击下面的链接完成注册,后面会发送给你很多垃圾广告,您的生活不再单调!<br><a href="'.$mail['url'].'">'.$mail['url'].'</a>';
	}
	
}
?>



这个解释器类里面可以添加不同类型邮件的模板,还可以完成邮件对象的实例化工作。最后编写测试类:TestInterpreter.php
<?php 
require('MailInterpreter.class.php');

//模拟邮件
$mail = array();
$mail['to_address'] = '[email protected]';
$mail['username'] = 'caroltc';
$mail['url'] = 'http://www.haoshutao.com/register/active?code=jfsifhewnfewjkewuew0fewjewjhie90ewhfw&check=iauh89ehfq88f90qfhf89fh';
$mail['type'] = 'register';

//构造对象并实例化
$mailobj = new MainInterpreter($mail);
print_r($mailobj->getMail()->send());
?>



输出:
标题:恭喜您注册成功,请完成注册
内容:尊敬的会员caroltc您好,恭喜您在本网站注册成功,请点击下面的链接完成注册,后面会发送给你很多垃圾广告,您的生活不再单调!
http://www.haoshutao.com/register/active?code=jfsifhewnfewjkewuew0fewjewjhie90ewhfw&check=iauh89ehfq88f90qfhf89fh
收件人:[email protected]



螃蟹觉得这个解释器设计模式很好理解,而且经常用,现在终于知道理论依据了。大概学完了一半的常用设计模式,收货还是颇多,剩下的也争取在本周解决掉,加油了。

你可能感兴趣的:(设计模式,PHP,解释器模式)