代理模式和装饰者模式的区别

2024-04-28

你能给出任何好的解释吗?Proxy and 装饰者?

我看到的主要区别是,当我们假设Proxy uses 作品 and 装饰者 uses 聚合那么似乎很清楚,通过使用多个(一个或多个)装饰器您可以修改/添加功能到预先存在的实例(装饰),而Proxy有自己的代理类的内部实例,并委托它添加一些附加功能(代理行为)。

问题是 - 是否Proxy通过聚合创建的仍然是Proxy更确切地说装饰者?是否允许(根据 GoF 模式中的定义)创建Proxy与聚合?


真正的区别不是所有权(组合与聚合),而是类型信息。

A 装饰者 is always通过了其代表。 AProxy might他自己创造它,或者他might注射它。

But a Proxy always了解受委托者的(更多)具体类型。换句话说,Proxy及其委托者将具有相同的基本类型,但是Proxy指向某种派生类型。 A装饰者指向它自己的基类型。因此,差异在于有关受委托者类型的编译时信息。

在动态语言中,如果被委托者被注入并且恰好具有相同的接口,那么就没有区别。

你的问题的答案是“是”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代理模式和装饰者模式的区别 的相关文章

  • 验证日期 - Bean 验证注释 - 使用特定格式

    我想验证日期格式YYYY MM DD hh mm ss Past validates for a date that is present or past But what are the formats it accepts 如果那不可能
  • 当代码依赖于两个对象的子类型时,是否有设计模式可以处理

    我会尽力尽可能明确 以防有比回答我的问题更好的解决方案 我正在使用 C 工作 我有一个报告模板 可以包含任意数量的打开的 功能 功能可能是信息表 饼图 条形图 列表等 我将报告生成为文本文件或 PDF 将来可能有其他选项 到目前为止我有一个
  • 代码改进:此模式的更好替代方案?

    在类似的问题中 这种模式叫什么 软锁 https stackoverflow com questions 7259436 what is this pattern called soft lock 我询问下面的代码清单的模式名称 publi
  • 是否可以将继承应用于 Singleton 类?

    今天面试时遇到一个问题 是否可以在单例类上应用继承概念 我说过 由于构造函数是私有的 因此我们无法扩展该 Singleton 类 他问我的下一件事是在该 Singleton 类上应用继承 因此 我将单例的构造函数设置为受保护的 认为孩子的构
  • 寻找一种重构 D3.js 风格的方法链接模式的方法

    在学习 D3 js 时 我遇到了博客文章 http bost ocks org mike chart 解释其可重用代码单元背后的主要设计模式 我复制了下面的相关代码 下面呈现的模式的方式正是在 D3 代码库和插件中使用的方式 example
  • 对于 Web 应用程序结构的最佳实践,您有哪些建议? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我在工作中做了很多定制应用程序 我正在尝试为新应用程序定义一些标准 有点像元素 CSS 你如何组织样式表 我是否应该为整个网站提供一个基本样式表
  • 错误 - 仅返回类型不同的函数不能重载。由 小码哥发布于

    我正在尝试创建一个图书馆管理系统 我收到一些我不明白的错误 我在 Mac 操作系统中使用 Eclipse 我的主要代码是 include
  • 使用组合来表示“is – a”关系时出现的问题

    我正在为人力资源系统开发系统 有会计员工和程序员员工 加入公司的第一个月 员工没有被赋予任何角色 一名员工可以同时担任会计师和程序员 我有一个由以下代码所示的设计 现在 我需要通过实现新功能来增强系统 解雇所有会计师 终止意味着将员工的状态
  • 为什么我不能将一个类划分为多个文件

    我正在尝试创建一个类TestClass它分为几个文件 我将它分成 3 个文件 其中第一个文件TestClassPart1 php已经开始上课了class TestClass 和最后一个文件TestClassPart3 php有班级的右括号
  • 为什么要分离接口和实现?

    在生产代码中 我经常看到定义如下的类 public interface SomeComponent Some methods public class SomeComponentImpl implements SomeComponent S
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • ASP.NET/ADO.NET:处理 .NET 对象内的许多数据库连接?

    我们有一个 NET 对象 它对数据库进行大量读 写操作 在该对象 或使用它的 ASP 页 的整个生命周期中 它可能会通过查询 更新来访问数据库 1 到 10 次 它不是在每次对象需要访问数据库时打开和关闭数据库连接 而是只是在实例化期间打开
  • Python Tkinter OOP 布局配置

    我正在尝试使用 tkinter 构建一个应用程序 该布局在没有 OO 原则的情况下工作 但我很难理解应该如何将其转移到 OO The layout is as shown in the pic below 1280x720px 我有以下内容
  • 在 Ext JS 构造函数中将项目推入数组会产生多个项目

    我有一个我定义的 Ext JS 类 在这个班级的constructor 我将一个文本字段推送到我的项目数组上 然后添加到我的测试字符串中 数组和字符串在类定义中都声明为空 但是 如果您尝试创建多个类实例 您将看到项目数组在每个实例之间共享
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • JavaScript - 这个这个

    String prototype foo String prototype foo bar function How can you reference the grandparent string console log this par
  • PHP 特性 - 定义通用常量

    定义可由命名空间内的多个类使用的常量的最佳方法是什么 我试图避免过多的继承 因此扩展基类不是理想的解决方案 并且我正在努力寻找使用特征的良好解决方案 这在 PHP 5 4 中是否可行 或者应该采取不同的方法 我有以下情况 trait Bas
  • 三层 Asp.Net 应用程序中的异常处理

    1 据我了解 在three tierAsp Net应用程序我们应该通过以下方式实现异常处理 a 我们应该把try catch围绕代码块 位于三层中的任何一层 我们希望页面能够从该代码块正常恢复 当此代码生成异常时 b 我们不应该放try c
  • PHP 中可以动态添加数据成员吗?

    我想知道是否可以在 PHP 运行时添加新的类数据成员 Yes prop newname obj gt prop 42 会做同样的事情 obj gt newname 42 如果 obj 尚不存在 则任一者都会将 newname 添加为属性

随机推荐

  • 服务堆栈上的 SSL

    Mono 上的服务堆栈是否支持 SSL 我只能访问 Mac 我在这里找到的说明要求您使用 Windows 工具创建 pvk 文件 http joshua perina com geo post using ssl https with mo
  • 如何向 SOAP 客户端添加 HTTP 标头

    如果可以将 HTTP 标头添加到 SOAP 客户端 Web 服务调用中 有人可以回答我吗 上网冲浪后 我唯一发现的就是如何添加 SOAP 标头 代码如下所示 var client new MyServiceSoapClient client
  • 透明

    从概念上讲 是否可以创建一个 div 显示内容 然后在内容上放置一个透明的 div 这样如果用户右键单击 gt 另存为 保存图像等 他们在执行此操作时将不会得到任何内容 是的 但它和 如果有人想复制您的内容 他们会
  • 不解决或拒绝承诺是否安全

    想象一下一个 Web 应用程序 其路由需要在继续之前检查是否允许用户访问给定资源 已通过身份验证 检查依赖于数据库调用 在每条路线中 我可能有 authorizeOwnership req res then function do stuf
  • 在 Windows Mobile 上模拟键盘事件

    请参考下面的截图 日期时间控件是紧凑框架 DateTimePicker 编号按钮是标准按钮控件 单击 DateTimePicker 的箭头将显示一个日历控件 允许用户选择日期 但是 如果用户单击所选文本日期的任何部分 该部分就会突出显示 并
  • 根据 rowversion 值更新记录?

    我最近实现了SQLrowversion以防止我的系统中出现并发问题 我用rowversion更新表中的单行时在 where 子句中 到目前为止 我已经测试过 似乎是一个很好的解决方案 现在我正在寻找一种简单的方法来在我的系统中实现此功能 这
  • 如何在java应用程序中检测FIN - tcp标志?

    我在两台计算机之间有持久的 TCP 连接 第二台计算机不受我的控制 第二台计算机可以随时发送FIN标志 并且首先必须关闭当前连接 将FIN标志发送回第二台计算机 我如何知道第二台计算机正在发送 FIN 标志 以及何时必须调用 Java 应用
  • Qt 捕获按下的键

    我想到写原始蛇 我有一个窗口 程序可以在其中绘制随机线条 但我想不出如何捕捉按下的键来改变画线的方向 class QUpdatingPathIte public QGraphicsPathItem void advance int phas
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 无需使用私有 API 即可获取当前第一响应者

    我在一个多星期前提交了我的应用程序 今天收到了可怕的拒绝电子邮件 它告诉我 我的应用程序无法被接受 因为我使用的是非公共 API 具体来说 它说 您的应用程序中包含的非公共 API 是firstResponder 现在 有问题的 API 调
  • @interface中的实例变量;标头与实现

    在标头中声明私有实例变量与在实现中声明它有什么区别吗 在 TestObj h 中 interface TestObj NSObject int test end 与 TestObj m 中的比较 interface TestObj int
  • ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境

    我跟着本文 https weblog west wind com posts 2016 Jun 06 Publishing and Running ASPNET Core Applications with IIS将我的 ASP NET M
  • 集合推导式在 Pydev (Python) 上不起作用

    x for x in range 10 在 IDLE 上完美运行 但是当我在 eclipse 中尝试 使用 Pydev 插件 时 出现语法错误 未定义的变量 x 是因为 Pydev 不支持集合理解什么的吗 我该怎么做才能使这项工作成功 这只
  • Postgresql存储过程返回表所有列

    创建了一个函数 该函数有一个输入参数 我可以返回一列 但我想返回所有表列 另外我想做的是 如果结果为零 函数只返回 0 我该怎么做 这里是错误结果 错误 查询没有结果数据的目标 提示 如果您想放弃 SELECT 的结果 请使用 PERFOR
  • 部署应用程序时无需取消部署前一个应用程序并且无需停机?

    我在 Web 应用程序中使用 Glassfish Java 和 JSP over MySQL 许多在线用户使用此网络应用程序 该网站不应关闭 当我想要部署一个新的 war 文件时 我应该在服务器上为我的应用程序取消部署并部署新的战争文件 我
  • 参数化测试也取决于 pytest 中的参数化值

    我有一个测试 我有一个设置方法 应该收到一个dataset和一个测试函数 应该为每个运行data in dataset 基本上我需要类似的东西 datasetA data1 a data2 a data3 a datasetB data1
  • 如何向 ionic 2 警报添加禁用按钮

    我创建了一个 ionic2 警报 我必须根据条件禁用按钮 这是我的代码的简单结构 import AlertController from ionic angular export class MyPage constructor publi
  • 将子域重定向到新域

    大家好 尝试让 301 重定向正常工作但遇到了麻烦 我需要将 sub domain1 com 重定向到 www domain2 com 并确保所有文件名或参数都随之发送 这就是我正在尝试的 RewriteCond HTTP HOST dom
  • Maven + Surefire/Failsafe - forkMode="perthread" 不起作用...解决方法?

    我们正在开发一个基于嵌入式 Infinispan 数据网格集群的应用程序 在我们应用程序的目标环境中 数据网格的每个成员将在独立的 JVM 中运行并使用jgroup集群将会形成 这实际上是由 Infinispan 完成的 为了对我们正在使用
  • 代理模式和装饰者模式的区别

    你能给出任何好的解释吗 Proxy and 装饰者 我看到的主要区别是 当我们假设Proxy uses 作品 and 装饰者 uses 聚合那么似乎很清楚 通过使用多个 一个或多个 装饰器您可以修改 添加功能到预先存在的实例 装饰 而Pro