设计模式 代理模式

WechatIMG37.jpeg

介绍

代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。通俗点说,代理模式就是为一个对象提供一个代理对象,代理对象可以控制原始对象的访问,从而达到在不改变原始对象的情况下扩展其功能或保护其安全的目的。代理模式在实际应用中也比较常见,例如远程代理、虚拟代理、缓存代理、安全代理等都可以使用代理模式来实现。

角色

角色 说明
Subject 抽象主题角色
RealSubject 真实主题角色
Proxy 代理主题角色
Client 访问角色

角色示例

假设有一个手机厂家,他们有自己的销售渠道和销售人员。但是,由于市场竞争激烈,厂家需要扩大销售渠道,以增加销售额。于是,厂家决定采用代理模式来扩大销售渠道。代理商通过代理销售人员来销售手机给顾客,扩大了销售渠道,提高了销售额。

类名 担任角色 说明
Phone 抽象主题角色 手机
PhoneFactory 真实主题角色 手机厂家
Agent 代理主题角色 代理商
Customer 访问角色 顾客

UML类图

代理模式.jpg

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php 
interface Phone
{
public function sale();
}

class PhoneFactory implements Phone
{
public function sale()
{
return "厂家销售".PHP_EOL;
}
}

class Agent implements Phone
{
protected $phoneFactory;
function __construct()
{
$this->phoneFactory = new PhoneFactory();
}

public function purchase()
{
return "采购".PHP_EOL;
}

public function sale()
{
return $this->purchase().'代替'.$this->phoneFactory->sale().$this->ship();
}

public function ship()
{
return "发货".PHP_EOL;
}
}

class Customer
{
public $agent;
function __construct()
{
$this->agent = new Agent;
}
}

$customer = new Customer();
echo $customer->agent->sale();

创建 Agent.php,内容如上。

执行

1
2
3
4
$ php Agent.php
采购
代替厂家销售
发货
-------------本文结束感谢您的阅读-------------
0%