首页 > 代码库 > 螃蟹学PHP设计模式之适配器模式

螃蟹学PHP设计模式之适配器模式

之前对java的设计模式略有了解,但是螃蟹目前是靠PHP吃饭,所以对于进阶学习php设计模式还是很有必要。螃蟹虽然做开发两年了,但是在老鸟眼中还是菜鸟,为了自己写的代码更容易维护和进行团队协作,所以我要搞定设计模式。希望螃蟹今年能创业成功或找个好工作。

1.适配器模式

  螃蟹的理解是你买了港行的iphone手机,发现自家的插座和手机自带的插头不配,怎么办呢,就需要一个转换器(适配器)。可能原来系统的类不是你设计的,但是现在你要使用原来的类,发现有问题,但原来的类又不能动,或者不需要动,这样你写一个类继承原来的类,再在新的类中添加想要的东西,再拿去用就可以了。螃蟹还是写一下代码记得牢固一点。

参考项目模块:会员系统

螃蟹之前遇到过某项目的会员系统,原来的会员对象已经定义了,但是新的项目又需要使用原系统的对象,但是新项目又增加了几个属性,这样适配器模式就利用上了,下面代码敲一遍,螃蟹写的代码都是在zend studio里面手打的并且测试过了的

原会员系统会员对象类User.class.php:

<?php 
class User{
	private $username = null;
	private $password = null;
	
	function __construct($user){
		$this->username = $user[‘username‘];
		$this->password = $user[‘password‘];
	}
	/**
	 * @return the $username
	 */
	public function getUsername() {
		return $this->username;
	}

	/**
	 * @return the $password
	 */
	public function getPassword() {
		return $this->password;
	}

	/**
	 * @param NULL $username
	 */
	public function setUsername($username) {
		$this->username = $username;
	}

	/**
	 * @param NULL $password
	 */
	public function setPassword($password) {
		$this->password = $password;
	}

}
?>

现在需要增加邮箱和个人简介,那原来的类不能直接改,那就使用适配器吧,创建UserAdapter.class.php

 

<?php 
require(‘User.class.php‘);

class UserAdapter extends User{
	private $email = null;
	private $description = null;

	function __construct($user){
		parent::__construct($user);
		$this->email = $user[‘email‘];
		$this->description = $user[‘description‘];
	}
	/**
	 * @return the $email
	 */
	public function getEmail() {
		return $this->email;
	}

	/**
	 * @return the $description
	 */
	public function getDescription() {
		return $this->description;
	}

	/**
	 * @param NULL $email
	 */
	public function setEmail($email) {
		$this->email = $email;
	}

	/**
	 * @param NULL $description
	 */
	public function setDescription($description) {
		$this->description = $description;
	}

}
?>

好的,我来测试一下结果:TestAdapter.php

<?php 
require(‘UserAdapter.class.php‘);

//模拟用户数据
$user = array(‘username‘=>‘螃蟹‘,‘password‘=>‘SB123456‘,‘email‘=>‘carol3732@qq.com‘,‘description‘=>‘螃蟹也会思考‘);
//实例化适配器对象
$userobj = new UserAdapter($user);
//输出结果
echo ‘   Username: ‘.$userobj->getUsername();
echo ‘<br>Password: ‘.$userobj->getPassword();
echo ‘<br>Email: ‘.$userobj->getEmail();
echo ‘<br>Description: ‘.$userobj->getDescription();
//改变密码和Email
$userobj->setPassword(‘ok456789‘);
$userobj->setEmail(‘312493732@qq.com‘);
//输出改变后的结果
echo ‘<br><br>Password: ‘.$userobj->getPassword();
echo ‘<br>Email: ‘.$userobj->getEmail();

?>

测试结果:

Username: 螃蟹
Password: SB123456
Email: carol3732@qq.com
Description: 螃蟹也会思考

Password: ok456789
Email: 312493732@qq.com

螃蟹觉得看起来高深的设计模式也还好懂,今天就到这里了,明天再学习新的设计模式了,继续单身的横着睡了。