问题标签 [proxy-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
362 浏览

c# - Stream 类的代理模式:实际的代理还是装饰器?

我是一个新手,通过阅读 Judith Bishop 的书“C# 3.0 设计模式”,刚刚开始涉足这个设计模式的世界。

作为 Proxy 章节末尾的练习,作者建议使用 Proxy 模式实现一个自定义类,该类“拦截、监视和记录对 Stream 方法的每次调用”。

我有点不确定我带来了什么,我想征求意见。在我放弃了一些想法之后(例如,从公开一些最常用的 Stream 方法的接口开始),我最终创建了一个继承自 Stream 并覆盖它的一些方法的类。这个类还有一个 FileStream 属性,我用它来调用实际的 Stream 方法和属性,我之前已经用方法包装了它们来记录它们的每个调用:

然而,这对我来说更像是一个装饰器。此外,自练习以来,“坏”装饰器询问“流方法”,我使用“文件流”作为实际类。

我不觉得这是代理模式最准确的例子,我有点不确定我是否理解了这个练习。

关于我应该如何进行这项练习的任何建议?提前致谢,

0 投票
1 回答
354 浏览

c# - EF Lazy Loading 是真正的代理模式吗?

我知道 EF 使用代理模式来实现延迟加载

1.站代理模式:

在此处输入图像描述

在代理模式中,[Proxy]不会从[RealSubject]继承。

2.EF

在延迟加载中,[Proxy] 类将继承[RealSubject]。

所以这与stand Proxy Pattern并不 完全相同。

但是为什么他们称它为代理模式呢?

0 投票
2 回答
297 浏览

java - 代理模式:如何比创建真实对象更有效?

在以下示例中,来自 wiki 书籍https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Proxy

我不确定这比仅创建真实对象并使用其中的显示图像更快/更有效。因为代理无论如何都会在 displayImage 方法中创建真实对象?

如果您不使用代理,代理模式肯定不会节省内存,因为它需要实例化两个对象(代理和真实)而不是一个(真实)?

0 投票
1 回答
1033 浏览

design-patterns - 代理设计模式的实现


我在 Wikipedia 站点中查看代理模式:http
://en.wikipedia.org/wiki/Proxy_pattern 我了解一台计算机中的程序。
但我问我有关在 2 台计算机中实现的问题。
实际上,在“现实生活”中,我认为:
1)接口主题在客户端(计算机A)和服务器(计算机B)中以相同的名称重复=>我是对的吗?
2)Proxy类的对象在客户端(计算机A)
3)RealSubject类的对象在服务器(计算机B)
4)在Proxy类的构造函数中,创建了RealSubject的实例=>我是对的?
在第 4 点,如果我是对的,如何在计算机 A 中实例化位于计算机 B 中的类?
例如,如果 B 类是 Web 服务,你会怎么做?
我提前谢谢你。

0 投票
1 回答
729 浏览

java - 如何准确地使用基于 Spring Inheritance 的代理配置?

我正在学习 Spring Core 认证,我发现一些与代理概念相关的疑问。

因此,在学习材料中,我找到了以下测验:

有一个 Java配置类,其中包含以下方法:

如您所见, transferService() 有 2 个不同的实现,分别命名为transferService1()transferService2(),它们创建并返回一个TransferServiceImpl对象。

第一个创建一个新的TransferServiceImpl对象,然后对其调用setAccountRepository()方法。

第二个简单地创建一个TransferServiceImpl,将一个新的JdbcAccountRepository对象传递给它的构造函数。

它问我**在前两种方法中哪个是最好的实现?

提供的答案是:Prefer call to dedicated method。所以我认为它说最好的方法是第一次实施。

它解释了AccountRepository bean 是一个单例(因为它是 Spring 中 bean 的标准范围)但是JdbcAccountRepository()可以被调用两次或更多次(例如在前面的代码片段中,它在调用方法时被调用transferService1()transferService2()如果是这样,这将是一个问题,因为AccountRepository必须是一个单例

这是真的吗?还是我错过了什么?

所以我收集到在启动时 foreach 配置类(用@Configuration注释)创建了一个扩展我的配置类的类。

例如,如果我有以下配置类:

它会自动创建以下扩展我的AppConfig的类:

所以子类是入口点(调用的方法是在子类中定义的方法),伪代码将是这样的:

所以很清楚 Spring 如何处理单例问题:它调用扩展配置类的代理类上的方法,如果请求的 bean 存在于 applicationContext 中,则返回此 bean,否则在创建的超类上调用相同的方法新 bean 并将其放入应用程序上下文中

这是基于代理模式的继承的正确含义还是我遗漏了什么?

0 投票
1 回答
513 浏览

java - 代理设计模式中主类的代码是什么?

请帮我创建这个代理设计模式的主类?

//文件名:Payment.java

//文件名:PaymentException.java

//文件名:PaymentImpl.java

}`

//文件名:PaymentService.java

//文件名:PaymentVO.java

//文件名:ServiceUnavailableException.java

}

0 投票
1 回答
1061 浏览

design-patterns - 如何在 MVC 中使用代理模式

作为一个更大的学校项目的一部分,我有一个使用 MVC 模式的应用程序设计,现在有一个新的需求来添加一个远程监控站。似乎代理模式最适合远程监视器,但是......将代理挂接到视图是否有意义,或者我是否需要其他东西,如适配器......或者挂接到模型并使用新的视图/控制器在客户端?

这是我试图描述的基本 UML 示例。

在此处输入图像描述

0 投票
1 回答
59 浏览

java - 代理设计模式中代码的 ISubject 和 Operation() 是什么?

我想知道使用下面的代码的基础是什么:1. ISubject 和 Operation() 2. realSubject: RealSubject 和 3. Operation() realSubject.Operation() 在代理设计模式的 UML 图上

关联

0 投票
3 回答
655 浏览

design-patterns - 为什么代理模式需要继承?

查看wikipedia 上的 UML 图,代理类和主题类都实现了相同的接口。

据我了解,代理类的目的是委托。这可以通过组合来完成;委托类不必实现相同的接口。

主题类必须实现与代理类相同的接口是否有原因?

0 投票
2 回答
192 浏览

c# - 良好的构造函数设计

一般来说,在构造函数中构造其他对象是不是一个坏主意(我通常不喜欢它)?假设 A 类型的对象需要 B 类型的实例。B 类型的实例应该是静态的,因为我真的只想要它的一个副本……真的……不,说真的。类型 b 还会引发类型 A 需要处理的事件。B 型位于我无法控制的外部库中。使我的 B 类对象成为静态对象似乎对测试来说是一件烦人的事情。我最初想让 A 完全静态,因为它本质上是 B 的代理。也许这才是真正的问题。当被代理的对象需要初始化时,什么是好的代理设计?我能想到至少三个选项:

  1. 传入参数需要构造类型 A 和类型 B。类型 A 的构造函数然后构造类型 B。(调用 create 方法从构造函数中返回类型 B 将是相同的基本概念。
  2. 传入一个构造对象。
  3. 创建一个初始化方法。

我不喜欢选项 1,因为它很复杂。我将不得不做所有类型的 B 类初始化代码、设置事件处理程序等。我不喜欢选项 2,因为我不希望外界知道这种依赖关系。A 类是唯一会与 B 类交互的类型。一般来说,我不喜欢初始化方法,或“保护”封装依赖项状态的方法。我似乎最终得到了很多这样的代码:

呸。

这是我正在使用的一些示例代码。只是在寻找如何使它真正干净,简单且易于维护。

更新: 我在对答案的评论中引用了这篇务实的文章。我熟悉 DI、IoC、工厂方法、构建器模式、构造函数注入、方法注入、属性注入、测试驱动设计等。我想我的问题是,如何在尽可能少编码的同时平衡简单性和良好设计并尽可能快地满足我目前的需求?B 类永远不会被替换,我没有理由相信除了 A 类之外的任何东西都会在我的项目中使用 B 类。我有点担心测试的接缝,但是 A 类非常简单,代码很少,并且基本上包装了一个第三方类。