设计模式--委托模式( Delegation)

article/2025/8/23 7:57:51

1、模式定义

委托是对一个类的功能进行扩展和复用的方法。它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能。 假设我们有一个 TeamLead 类,将其既定任务委托给一个关联辅助对象 JuniorDeveloper 来完成:本来 TeamLead 处理 writeCode 方法,Usage 调用 TeamLead 的该方法,但现在 TeamLead 将 writeCode 的实现委托给 JuniorDeveloper 的 writeBadCode 来实现,但 Usage 并没有感知在执行 writeBadCode 方法。

2、UML类图在这里插入图片描述

3、示例代码

Usage.php
<?phpnamespace DesignPatterns\More\Delegation;// 初始化 TeamLead 并委托辅助者 JuniorDeveloper
$teamLead = new TeamLead(new JuniorDeveloper());// TeamLead 将编写代码的任务委托给 JuniorDeveloper
echo $teamLead->writeCode();
TeamLead.php
<?phpnamespace DesignPatterns\More\Delegation;/*** TeamLead类* @package DesignPatterns\Delegation* `TeamLead` 类将工作委托给 `JuniorDeveloper`*/
class TeamLead
{/** @var JuniorDeveloper */protected $slave;/*** 在构造函数中注入初级开发者JuniorDeveloper* @param JuniorDeveloper $junior*/public function __construct(JuniorDeveloper $junior){$this->slave = $junior;}/*** TeamLead 喝咖啡, JuniorDeveloper 工作* @return mixed*/public function writeCode(){return $this->slave->writeBadCode();}
}
JuniorDeveloper.php
<?phpnamespace DesignPatterns\More\Delegation;/*** JuniorDeveloper 类* @package DesignPatterns\Delegation*/
class JuniorDeveloper
{public function writeBadCode(){return "Some junior developer generated code...";}
}

4、测试代码

Tests/DelegationTest.php
<?phpnamespace DesignPatterns\More\Delegation\Tests;use DesignPatterns\More\Delegation;/*** DelegationTest 用于测试委托模式*/
class DelegationTest extends \PHPUnit_Framework_TestCase
{public function testHowTeamLeadWriteCode(){$junior = new Delegation\JuniorDeveloper();$teamLead = new Delegation\TeamLead($junior);$this->assertEquals($junior->writeBadCode(), $teamLead->writeCode());}
}

http://chatgpt.dhexx.cn/article/HwkmX80I.shtml

相关文章

委托(delegation)的使用方法

1&#xff0c;组合和委托 委托是一个对象请求另一个对象的功能&#xff0c;是复用的一种常见形式。 2&#xff0c;委托和继承 3&#xff0c;使用委托的好处 从程序的角度来讲&#xff1a;你就可以把委托看成是用来执行方法&#xff08;函数&#xff09;的一个“指针” 通俗的…

线性代数:05 实对称矩阵与二次型

本讲义是自己上课所用幻灯片&#xff0c;里面没有详细的推导过程&#xff08;笔者板书推导&#xff09;只以大纲的方式来展示课上的内容&#xff0c;以方便大家下来复习。 本章是特征值与特征向量知识的延续&#xff0c;根据谱定理可知实对称矩阵可以正交对角化&#xff0c;对…

矩阵空间、秩1矩阵

今天要介绍一种新的向量空间&#xff0c;即矩阵空间&#xff0c;之前碰到的所有向量空间&#xff0c;都是n维的实数空间&#xff0c;现在我们将矩阵当成向量&#xff0c;比如说将3*3的矩阵看作向量&#xff0c;这相当于从原来的n维为扩展到n*n维&#xff0c;那么明明是矩阵为什…

【线性代数】详解正定矩阵、实对称矩阵、矩阵特征值分解、矩阵 SVD 分解

前言 本文主要针对线性代数中的正定矩阵、实对称矩阵、矩阵特征值分解以及矩阵 SVD 分解进行总结。 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 正定矩阵 1. 概念 首先正…

【线性代数】矩阵及其特性

【线性代数】矩阵及其特性 写在前面只拉伸不旋转的方向特征值和特征向量相似和对角化正交&#xff0c;对称矩阵 拉伸最大的方向二次型理论从曲线而来合同矩阵正定二次型 参考资料 写在前面 本文是笔者用于复习本科期间所学线性代数&#xff0c;试图用一种更易接受的方式加强记…

对称函数、半正定矩阵(核函数涉及)

一、对称函数 在对称函数中&#xff0c;函数的输出值不随输入变数的排列而改变。从函数的形式中可以看出若输入变数排列后&#xff0c;方程式不会改变。例如对于一个球体&#xff0e;若 φ 为其方位角&#xff0c;θ为其天顶角&#xff0c;r为半径&#xff0c;则大圆距离可以表…

矩阵的秩,特征值和特征向量 矩阵基础概念

矩阵是非常重要而基础的数学知识了。大学课上学线性代数基本就是在学矩阵的各种操作和运算。在深度学习里&#xff0c;几乎所有的参数也都是存放在矩阵中&#xff0c;并通过矩阵来做各种运算。大概把矩阵的基本知识点复习和总结一下。 行列式和矩阵的区别&#xff1a; 行列式和…

c++求矩阵的秩_常见的矩阵分解

矩阵的谱分解(可对角化矩阵——满秩可逆) 谱分解定理&#xff1a;设 为一个n阶可对角化矩阵&#xff0c;A的谱为 其中 的重数为 ,则存在唯一一组s个n阶方阵 ,满足(1) (2) (3) (4) (5) 这些矩阵 称为矩阵A的成分矩阵或主幂等矩阵。一般成分矩阵不一定是Hermite矩阵&a…

线性代数笔记15——矩阵空间和秩1矩阵

矩阵空间 矩阵空间是对向量空间的扩展&#xff0c;因为矩阵的本质是向量&#xff0c;所以与向量空间类似&#xff0c;也存在矩阵空间。 在向量空间中&#xff0c;任意两个向量的加法和数乘仍然在该空间内。类似的&#xff0c;所有固定大小的矩阵也组成了矩阵空间&#xff0c;在…

满秩矩阵与正定矩阵

满秩矩阵 设A是n阶矩阵, 若r&#xff08;A&#xff09; n, 则称A为满秩矩阵。但满秩不局限于n阶矩阵。 若矩阵秩等于行数&#xff0c;称为行满秩&#xff1b;若矩阵秩等于列数&#xff0c;称为列满秩。既是行满秩又是列满秩则为n阶矩阵即n阶方阵。 矩阵的秩&#xff1a; 用初…

矩阵转置与矩阵对称性的关系

对称矩阵的定义&#xff1a;对称矩阵是指以主对角线为对称轴&#xff0c;各元素对应相等的矩阵 即的方阵 用两种方式说明矩阵的转置与矩阵自身相乘的结果是一个对称矩阵&#xff08;S为对称矩阵&#xff09; 方法一&#xff1a; 假设有3 x 2的矩阵 根据矩阵乘法可知&#xf…

线性代数学习之对称矩阵与矩阵的SVD分解

完美的对称矩阵&#xff1a; 定义&#xff1a; 在上一次线性代数学习之特征值与特征向量 - cexo - 博客园学习了矩阵的特征值和特征向量相关的概念&#xff0c;这次则继续延展上一次的内容&#xff0c;这次则来学习对称矩阵&#xff0c;其标题上加了“完美”俩字&#xff0c;…

实对称矩阵的特征值求法_线性代数之实对称矩阵得相似对角化问题的方法总结...

对于一个实对称矩阵不仅可以通过一个可逆矩阵相似对角化,还可以通过一个正交矩阵来相似对角化。实对称矩阵的不同特征值所对应的特征向量正交,而且实对称矩阵的特征值全为实数。在考研中,我们一定要重点掌握会求一个正交矩阵来相似对角化,这里的正交矩阵是矩阵的彼此正交且…

三阶实对称矩阵的秩一分解(快速计算三阶矩阵特征值特征向量的方法)

定理&#xff1a;三阶实对称矩阵如果存在二重特征根一定可以写成如下形式 其中三个特征值为&#xff0c;&#xff0c;&#xff0c;其中一个特征向量是。根据定义&#xff0c;另一特征向量一定是与和正交的向量。 通过上述方法&#xff0c;可以快速计算出三个特征值和一个特征向…

为什么非零实对称矩阵一定是正定矩阵

从酉相似的角度证明实对称矩阵一定可以对角化&#xff0c;对角化之后对应的二次型一定大于0&#xff0c;因此实对称矩阵一定是正定矩阵。 第一张图说明了一个方阵A必定酉相似于一个上三角矩阵T&#xff0c;T的对角线元素就是A的特征值。且这里可以无论特征值重复与否。 第二张…

矩阵求秩

矩阵的秩怎么计算&#xff0c;这个问题一下子我居然不知道怎么下手。。虽然本科的时候学过线性代数&#xff0c;但是好久不用&#xff0c;很多东西都忘了。。今天略微梳理一下吧。 最简单直观的方法&#xff1a; 化成行最简形&#xff08;或行阶梯形&#xff09;&#xff0c;然…

搜片源必备

1.入门级 一般的经典、大众类电影&#xff0c;在各大主流视频网站都有。如&#xff1a;腾讯、优酷、爱奇艺、搜狐、乐视等。 2.初级 冷门的、最新的电影&#xff0c;以及一些“非主流”电影&#xff0c;可以通过网盘搜索引擎和一些影视资源网站来获取。 个人推荐的网盘引擎 呆…

各种搜索

搜索 本校的Lazer2001 学长为我们讲了搜索&#xff08;乱搞&#xff09; 搜索 基础&#xff1a;位运算 超级基础感觉有点难度&#xff1f;bitset例题&#xff1a;位运算 & bitset 基础搜索 DFSBFS 特殊的搜索方式 双向DFS搜索双向BFS搜索哈希康托展开迭代加深搜索&#xff…

搜索APP

文章目录 目录 文章目录 概要 功能模块图 技术名词解释 架构设计 小结 概要 本项目系统整体实现了登录功能、注册功能&#xff0c;首页页面的搜索功能、首页内容&#xff0c;我的界面中个人信息的增删改查、浏览记录、退出登录功能。 在App中用到Activity、Service组件…

搜索大全。

蓝桥杯搜索大全 练功&#xff08;bfs,相同步数的节点在队列中该以如何顺序摆放机器人塔&#xff08;最底行定则全局定&#xff0c;如熄灯问题&#xff09;卡片换位存储信息一维坐标和二维坐标的转化 迷宫与陷阱 练功&#xff08;bfs,相同步数的节点在队列中该以如何顺序摆放 最…