软件工程之开发代理设计模式
添加时间:2019-10-28 15:07:45
来源:
代理也称为代理,句柄和包装器。它们在结构上与适配器和装饰器密切相关,但不是目的。
现实世界中的例子可以是支票,也可以使用信用卡代替我们银行帐户中的内容。它可以代替现金,并在需要时提供一种获取现金的方法。而这正是代理模式的作用–“ 控制和管理对其所保护对象的访问 ”。
行为
与装饰器模式一样,代理可以链接在一起。客户端和每个代理都认为它正在将消息委派给真实服务器:
何时使用此模式?
当我们需要创建一个包装来覆盖客户端的主要对象的复杂性时,将使用代理模式。
代理类型
远程代理:
它们负责代表位于远程的对象。与真实对象交谈可能涉及数据的编组和拆组以及与远程对象交谈。所有这些逻辑都封装在这些代理中,客户端应用程序不必担心它们。
虚拟代理:
如果真实对象应该花费一些时间来生成结果,则这些代理将提供一些默认的即时结果。这些代理启动对实际对象的操作,并为应用程序提供默认结果。完成真实对象后,这些代理会将实际数据推送到客户端,客户端在此之前已提供了伪数据。
保护代理:
如果应用程序无权访问某些资源,则此类代理将与有权访问该资源的应用程序中的对象进行对话,然后将结果取回。
智能代理:
智能代理通过在访问对象时插入特定操作来提供附加的安全层。一个示例可以是在访问真实对象之前检查它是否已锁定,以确保没有其他对象可以更改它。
一些例子
一个非常简单的现实生活场景是我们的大学互联网,它限制了网站的访问。代理首先检查您要连接的主机,如果它不是受限站点列表的一部分,那么它将连接到真实的互联网。本示例基于保护代理。
让我们看看它是如何工作的:
互联网接口
filter_none
brightness_4
package com.saket.demo.proxy;
public interface Internet
{
public void connectTo(String serverhost) throws Exception;
}
RealInternet.java
filter_none
brightness_4
package com.saket.demo.proxy;
public class RealInternet implements Internet
{
@Override
public void connectTo(String serverhost)
{
System.out.println("Connecting to "+ serverhost);
}
}
ProxyInternet.java
filter_none
brightness_4
package com.saket.demo.proxy;
import java.util.ArrayList;
import java.util.List;
public class ProxyInternet implements Internet
{
private Internet internet = new RealInternet();
private static List<String> bannedSites;
static
{
bannedSites = new ArrayList<String>();
bannedSites.add("abc.com");
bannedSites.add("def.com");
bannedSites.add("ijk.com");
bannedSites.add("lnm.com");
}
@Override
public void connectTo(String serverhost) throws Exception
{
if(bannedSites.contains(serverhost.toLowerCase()))
{
throw new Exception("Access Denied");
}
internet.connectTo(serverhost);
}
}
Client.java
filter_none
brightness_4
package com.saket.demo.proxy;
public class Client
{
public static void main (String[] args)
{
Internet internet = new ProxyInternet();
try
{
internet.connectTo("geeksforgeeks.org");
internet.connectTo("abc.com");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
由于其中一个站点在禁止站点中被提及,因此
运行该程序将给出输出:
连接到geeksforgeeks.org
拒绝访问
优点:
代理模式的优点之一是安全性。
这种模式避免了对象的重复,这些对象可能是巨大的并且占用大量内存。反过来,这可以提高应用程序的性能。
远程代理还通过在客户端计算机上安装本地代码代理(存根),然后借助远程代码访问服务器来确保安全性。
缺点/后果:
这种模式引入了另一层抽象,如果某些客户端直接访问RealSubject代码,而其中一些可能访问Proxy类,则有时可能会遇到问题。这可能会导致不同的行为。
有趣的一点:
相关模式之间几乎没有差异。就像Adapter模式为其主题提供不同的接口,而Proxy模式提供与原始对象相同的接口,而装饰器提供增强的接口。装饰器模式在运行时添加了其他行为。
Java API中使用的代理:java.rmi。*;
需要软件开发就找我们成都软件外包公司吧!
2021-07
到目前为止,我们已经为我们OracleNetsuite的标题创建了导航栏。完成标题的下一件事是在图像上方包含图像和文本,如下面的屏幕截图所示:让我们再次查看index.html 文件中标题的部分代码。代码中突出显示的部分显示了标题的图像菜单:要完成图像菜单,我们首先需要在 id … [了解更多]
2021-07
响应式网站:响应式网站是旨在适合所有类型的设备并调整网站布局以最适合屏幕尺寸的网站。无需制作任何其他设备版本的网站以适应小型设备。移动网站:移动网站是专为适应手机、平板电脑等特别小的设备屏幕而设计的网站。需要制作网站的桌面版本以适应移动设备特定的桌面屏幕。响应式网站和移动网站的区… [了解更多]
2021-06
OracleNetsuitePython 提供了许多分发 Python 项目的方法。其中一种方法是使用一种称为 Docker 的重要技术。Docker 是一个开源应用程序,允许管理员使用容器创建、管理、部署和复制应用程序。它基本上是一个平台,使开发人员能够通过将应用程序放入容器中… [了解更多]
2021-05
财务负责人戴了两顶帽子:一是遵守法规,以确保公司的行为和会计正确无误,并遵守公司开展业务的不同司法管辖区的法规;二是遵守法规。一种战略,确保公司达到财务里程碑和成功指标。当一家公司上市时,包括通过特殊目的收购公司(SPAC)上市时,这两个角色尤其重要。Oracle NetSuit… [了解更多]
2021-03
公司财务人员中记账人员的工作内容:1、从钉钉中下载审批完成的8种审批类型的单据数据,包含合同付款、费用报销等2、记账人员根据付款的性质及费用归属,把记账分成6种形式:合同付款(工程、成本)、合同付款(其他)、非合同付款(工程、成本)、非合同付款(其他)、费用报销(工程、成本)、费… [了解更多]