当前位置:首页 > CN2资讯 > 正文内容

代理设计模式(Proxy)

11小时前CN2资讯


1. 概述

面向对象编程的过程中,“本人”和“代理人”都是对象。如果“本人”对象太忙的了,有些工作自己无法亲自完成,就将其交给“代理人”对象负责。

在处理请求的时候“代理人”会尽量处理客户的请求,只有自己不能处理时,才会把工作交给“本人”。例如:可以在“代理人”判断请求的是否合法和处理异常等,“本人”要实现线程同步,则可以在“代理人”中实现同步,具体的请求处理在交给“本人”处理。

2. 实例程序

一个接口类,本人类和代理类都需要实现这一个接口。

Printable.java , 接口类。

package proxy; public interface Printable { /** * 设置名字 * @param name 名字 */ public abstract void setPrinterName(String name); /** * 获取名字 * @return 获取的名字字符串 */ public abstract String getPrinterName(); /** * 打印 string 字符串 * @param string 将要被打印的字符串 */ public abstract void print(String string); }

本人类,Printer.java:

package proxy; public class Printer implements Printable { private String name; // 名字 public Printer(String name) { = name; heavyJob("Printer实例正在生成中 (" + name + ")"); } @Override public void setPrinterName(String name) { = name; } @Override public String getPrinterName() { return ; } @Override public void print(String string) { System.out.println("=== " + name + " ==="); System.out.println(string); } private void heavyJob(String msg) { System.out.println(msg); for (int i=0; i<5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("."); } System.out.println("结束。"); } }

代理类代替本人类实现setPrinterName和getPrinterName两个方法,只有在需要调用本人类“独有的方法print”才去创建本人类实例,PrinterProxy.java:

package proxy; public class PrinterProxy implements Printable{ private String name; // 名字 private Printer real; //本人 public PrinterProxy() { } public PrinterProxy(String name) { = name; } @Override public synchronized void setPrinterName(String name) { if (real != null) { real.setPrinterName(name); } = name; } @Override public String getPrinterName() { return name; } @Override public void print(String string) { realize(); real.print(string); } private synchronized void realize() { if (real == null) { real = new Printer(name); } } }

示例的UML图如下所示:

测试代码,Test.java:

package proxy; public class Test { public static void main(String args[]) { Printable p = new PrinterProxy("Rose"); System.out.println("现在的名字是" + p.getPrinterName()); p.setPrinterName("Jack"); System.out.println("现在的名字是" + p.getPrinterName()); p.print("Hello Proxy!"); } }

运行截图如下所示: 

参考文献:

  • 图解设计模式 - 结成浩著、杨文轩译 - 人民邮电出版社
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24970.html

    分享给朋友:

    “代理设计模式(Proxy)” 的相关文章

    inet.ws 纽约VPS测评:高性能不限流量,享受流畅网络体验

    inet.ws 是一家在2020年成立的科技公司,专注于提供高性能的VPS服务。从成立之初,我们的目标就是为用户提供稳定、高效且不限流量的虚拟服务器解决方案。我们深知,无论是个人用户还是企业客户,都需要一个可靠的网络环境来支持他们的日常操作和业务需求。因此,我们致力于打造一个能够满足多样化需求的服务...

    VPSDime评测:高性价比的VPS服务选择

    VPSDime概述 在如今互联网发展的浪潮中,各种主机服务商层出不穷,VPSDime作为一家成立于2013年的海内外主机服务商,引起了我的关注。它隶属于Nodisto IT,专注于VPS业务,提供多种类型的虚拟专用服务器。这对我这样的用户来说,选择合适的主机服务显得尤为重要,尤其是对于需要高性能和高...

    LeaseWeb旧金山数据中心:为企业提供高效IT基础设施解决方案

    在谈到全球范围内的IT基础设施解决方案时,LeaseWeb无疑是一个重要的名字。成立于荷兰的LeaseWeb,凭借其卓越的服务和强大的网络能力,已经发展成为一家全球性的科技公司。它不仅提供传统的独立服务器服务,还涵盖了云计算、服务器托管等多样化的解决方案。对我而言,LeaseWeb就像是一座桥梁,连...

    AS4837线路概述与技术特点解析,适合预算有限用户的高速网络选择

    AS4837线路的概述 当我开始了解AS4837线路时,就会发现它不仅仅是一个技术名词,更是中国联通的一部分。AS4837,简称为China169,是中国联通的骨干网线路,诞生于20世纪90年代。这条线路架起了中国大陆与全球之间的桥梁,特别是连接了香港、美国、日本和韩国等重要地区。对于那些追求高速互...

    dataonline3:高效的数据管理与分析工具

    1. dataonline3概述 在当今这个数据驱动的时代,dataonline3作为一个先进的数据管理工具,受到了广泛关注。它整合了丰富的数据处理功能,使用户能够轻松地收集、分析和展示数据。用户无论是在科研、企业还是个人项目中,dataonline3都提供了便利和强大的支持。 dataonline...

    酷番云:便捷、安全的云存储解决方案

    什么是酷番云 酷番云是一种先进的云存储解决方案,旨在提供便捷、安全的文件存储和管理服务。想象一下,不论你身在何处,都能够轻松访问自己的文件,这正是酷番云所追求的目标。它允许用户在一个可靠的平台上存储文档、照片、视频等各种类型的文件,并随时随地进行访问和分享。 作为一种现代化的商业工具,酷番云不仅适用...