螃蟹学PHP设计模式之代理模式

本文介绍了一种软件设计模式——代理模式,并通过PHP实现了一个简单的例子。该例使用MySQL数据库访问来展示如何通过代理对象进行数据库操作,从而保护了实际对象不受外部干扰。

13.代理模式

趁着还没睡觉,螃蟹决定把代理模式也弄完。今天学的原型模式就是对象克隆,而现在学的代理模式就是对象通信。代理模式比较好理解,就是你要买苹果手机,肯定不会直接和苹果公司交易,而是通过代理商来交易。代理对象与原对象继承同一个基类,可以有扩充,可以很方便的解决对象访问中间处理的问题,特别是多数据库连接的设计等。

参考项目模块:数据库操作模块

这里螃蟹使用mysql数据库访问来实现一个简单的代理模式访问数据库。

用户对象:User.class.php

<?php 

class User{
	public $username = '';
	public $sex = '';
}

?>



数据库访问接口:DB.interface.php
<?php 

interface DB{
	function save();
	function delete();
}

?>



mysql操作类:Mysql.class.php
<?php 
require_once('DB.interface.php');

class Mysql implements DB{
	
	private $data = '';
	
	public function __construct($db,$table,$data){
		$this->data = $data;
		echo $db.'.'.$table.' 已经连接<br>';
	}
	
	public function save(){
		echo $this->data->username.' 添加成功<br>';	
	}
	
	public function delete(){
		echo $this->data->username.' 删除成功<br>';
	}
}

?>



mysql代理类: Mysql.proxy.php
<?php
require_once('Mysql.class.php');
class MysqlProxy implements DB {
	
	private $mysql = '';
	public function __construct($db,$table,$data){
		$this->mysql = new Mysql($db, $table, $data);		
	}
	
	public function save() {
		// TODO Auto-generated method stub
		$this->mysql->save();
	}
	
	public function delete() {
		// TODO Auto-generated method stub
		$this->mysql->delete();
	}

}
?>



测试文件:TestProxy.php
<?php 
require('User.class.php');
require('Mysql.proxy.php');


//模擬用戶
$user = new User();
$user->username = '螃蟹';
$user->sex = '男';

//調用代理
$proxy = new MysqlProxy('test', 'users', $user);
//保存
$proxy->save();
//刪除
$proxy->delete();
?>



测试结果:
test.users 已经连接
螃蟹 添加成功
螃蟹 删除成功



基本上代理模式的好处就是很好的保护被代理的对象,代理(虚拟对象)在调用真实对象之前拦截数据并处理后再去访问真实对象,对于网络请求方面应该会有很大用处的,因为HTTP服务器本身就是代理服务器。

转载于:https://my.oschina.net/caroltc/blog/300971

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值