设计模式 | 代理模式
时间:2022-07-22
本文章向大家介绍设计模式 | 代理模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
说明
这个设计模式也是比较简单, 先说一下定义: 代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。
代理就是面向客户的, 意思就是代理对象负责接受客户任务, 但是其实并不是真正工作的, 中间商罢了。再不懂来看看?
示例
比方说 客户需要买电脑和修电脑 但是客户并不知道哪里可以有 但是后面他找到了一个人, 他说可以干这个事情, 但是这个人并不会这两个东西, 他可能是电脑商店的代理
<?php
/**
* Created by 憧憬.
*/
/**
* 电脑商店约束
* Interface ComputerShop
*/
interface ComputerShop {
// 修理电脑
public function repair();
// 出售电脑
public function sell();
}
/**
* Dell 电脑商店
* Class DellComputerShop
*/
class DellComputerShop implements ComputerShop {
public function repair()
{
echo 'dell 电脑修理';
}
public function sell()
{
echo 'dell 电脑出售';
}
}
/**
* mac 电脑商店
* Class MacComputerShop
*/
class MacComputerShop implements ComputerShop {
public function repair()
{
echo 'mac 电脑修理';
}
public function sell()
{
echo 'mac 电脑出售';
}
}
/**
* 代理人
* Class Proxy
*/
class Proxy implements ComputerShop
{
public $computerShop;
/**
* Proxy constructor.
* @param $computerShop
*/
public function __construct(ComputerShop $computerShop)
{
$this->computerShop = $computerShop;
}
public function repair()
{
$this->computerShop->repair();
}
public function sell()
{
$this->computerShop->sell();
}
}
//$dellProxy = new Proxy(new MacComputerShop());
$dellProxy = new Proxy(new DellComputerShop());
$dellProxy->repair();
这个设计模式主要是利用了语言的多态, 干活的是被代理类, 接活的是代理类。你可以让代理干活, 代理给幕后干, 最终事情做的漂亮就行。
本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。
- Golang 语言--linux 下 go语言 vim设置
- 南阳OJ----Binary String Matching
- Golang RSA加密解密程序
- HDUOJ--汉诺塔II
- Golang语言-操作json,注意json的嵌套、数组
- Java随机数算法(一)(r11笔记第14天)
- 【翻译】Golang语言-是面向对象语言吗?
- 一些Golang小技巧
- 数据载入过慢?这里有一份TensorFlow加速指南
- 转--如何压缩Golang 编译出的可执行文件大小
- 转-Golang语言-- Test Case
- 最小公倍数
- 十条有用的 Golang语言 技术
- 闪回区报警引发的性能问题分析(r11笔记第11天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android:无线调试就是这么简单
- Java自动化测试(回写与断言 17)
- 一篇就够——Kotlin快速入门
- 微信大牛教你深入了解数据库索引
- SqlServer 资源消耗查询
- Android:检查通知权限并跳转到通知设置界面
- OpenShift应用发布和运维设计
- Android:依赖Module的问题汇总
- Android:加载网图时精确获取图片格式
- Android:8.0中未知来源安装权限变更
- Android:RippleDrawable 水波纹/涟漪效果
- Android:Chip、ChipGroups、ChipDrawable
- Android9.0 使用 AndroidVideoCache 时不能缓存/播放视频的解决
- Android:流式布局实现总结
- 跨域问题汇总