V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huzhikuizainali
V2EX  ›  C++

"委托"是不是一个超级"快捷方式"?

  •  
  •   huzhikuizainali · 2023-10-07 14:39:33 +08:00 · 714 次点击
    这是一个创建于 416 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看单元测试的书,突然看到一个生词“委托”。去查了一下含义。得到两种“似乎”平行的解释。请教各位老师,哪种解释是对的?

    第一种解释,给我的感觉就是大号快捷方式。就好比我每天启动电脑都要启动 qq ,excel ,word 三个软件。每天点三次很累。我把三个程序的快捷方式放到一个 A 文件夹里。每次双击 A 文件夹这三个程序一起启动。这个 A 文件夹就是一个委托。 依据来源: https://zhuanlan.zhihu.com/p/146341073

    https://www.bilibili.com/video/BV1wN411K7fc/?share_source=copy_web&vd_source=d0dfc60b858a7a9bfd33436d63b2a370&t=268

    第二种解释就比较复杂了。以下是《设计模式--可复用面向对象的软件基础》原文: 委托(delegation) 是一种组合方法,它使组合具有与继承同样的复用能力[Lie86, JZ91] 。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代 理者(delegate) 。这类似千子类将请求交给它的父类处理。使用继承时,被继承的操作总能 引用接受请求的对象,C++中通过 this 成员变扯,Smalltalk 中则通过 self 。委托方式为了得 到同样的效果,接受请求的对象将自己传给被委托者(代理者),使被委托的操作可以引用接 受请求的对象。

    为什么说这两种解释是平行的。因为第一种比较简单,声明委托,定义委托(说明具体指向哪些方法或变量),使用委托。就行了。第二种怎么还有组合,继承啊,“两个对象参与处理一个请求”啊。难道没有父类子类,没有继承或组合关系。就无法使用委托? 所以以上两种解释,哪种正确?或者我的理解哪里有错,还请各位老师指正!

    archxm
        1
    archxm  
       2023-10-08 15:18:59 +08:00
    其实没有必要搞这些比喻的。
    你大概看一下语法,cook 手段,然后,想一想自己的业务,用一用。
    不过有时候,你用别人的库、方法,因它的东西,侵入性太强,导致必须用它的某种怪异方式,来实现。这就比较绕,让你不容易理解。不过,我劝你捏住鼻子,多用用,过一段时间,自然就理解了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4127 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:18 · PVG 13:18 · LAX 21:18 · JFK 00:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.