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

关于这个模式暂时理解的不深,直接上代码吧。

常规的代理模式的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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值