您的位置:首页 > 编程语言 > PHP开发

设计模式入门-代理模式(php版)

2015-03-30 10:24 627 查看
关于这个模式暂时理解的不深,直接上代码吧。
常规的代理模式的uml类图如下所示:



从上图中可以看出client需要调用realsubject类的服务,proxy类其实充当的是一个中介的角色。至于为什么要加上这样一层中间的代理,暂时不理解,如果有了解的朋友可以文章的下方评论区提出,不胜感激。
代理模式的官方定义是:为另一个对象提供一个替身或占位符以控制对这个对象的访问。
写了一个男生追女生的案例帮助理解,
Girl.php

<?php 
class Girl{
	private $name;
	public function __construct($name){
		$this->name = $name;
	}
	
	public function getName(){
		return $this->name;
	}
}
Boy.php

<?php
require_once 'GiveGift.php';
class Boy implements GiveGift{
	public $girl;
	
	public function __construct(Girl $girl){
		$this->girl = $girl;
	}
	
	public function giveBook(){
		echo $this->girl->getName().',送你一本书';
	}
	
	public function giveLetter(){
		echo $this->girl->getName().',送你一封信';
	}
	
	public function giveFolower(){
		echo $this->girl->getName().',送你一朵书';
	}
}


Roommate.php

<?php
require_once 'GiveGift.php';
class Roommate implements GiveGift{
	
	public $boy;
	
	public function __construct(GiveGift $boy){
		$this->boy = $boy;
	}
	
	public function giveBook(){
		$this->boy->giveBook();
	}

	public function giveLetter(){
		$this->boy->giveLetter();
	}

	public function giveFolower(){
		$this->boy->giveFolower();
	}
}
GiveGift.php

<?php
interface GiveGift{
	public function giveBook();
	
	public function giveLetter();
	
	public function giveFolower();
}
index.php

<?php
require 'Girl.php';
require 'Boy.php';
require 'Roommate.php';

//其实这里面的韩梅梅就是真实需要请求的服务
$realSubject = new Girl('韩梅梅');

//男孩就是客户端
$client = new Boy($realSubject); 

//女孩的室友就是一个中介代理
$proxy = new Roommate($client);

$proxy->giveBook();
$proxy->giveLetter();
$proxy->giveFolower();


代码可以从这个地址下载:http:://www.walk-sing.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: