Java设计模式之代理模式详细解读

 更新时间:2021年08月23日 17:28:18   作者:zsr6135  
这篇文章主要介绍了Java设计模式的代理模式,文中有非常详细的代码示例,对正在学习Java设计模式的小伙伴有很大的帮助,感兴趣的小伙伴可以参考一下

Java设计模式-代理模式

什么是代理模式?

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

所谓的代理严格来讲就是两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个辅助完成主类业务逻辑操作。

代理模式-UML图:

源代码:

interface ISubject{//操作主题
	public void get();//要钱
}
class RealSubject implements ISubject{
	public void get(){
		System.out.println("还钱");
	}
}
class ProxySubject implements Subject{//代理实现
	private ISubject sub = null;//真正的操作业务
	//在创建代理类对象的时候必须设置要代理的真实主题
	public ProxySubject(Subject sub){
		this.sub=sub;
	}
	public void prepare(){
		System.out.println("准备讨债工具");
	}
	public void destroy(){
		System.out.println("得到了欠债的费用");
	}
	public void get(){	//接口子类一定要实现抽象方法
		this.prepare();//真实操作之前的准备
		this.sub.get();//调用真实的业务逻辑
		this.destroy();//操作之后的收尾工作
	}
}
public class DaiLi{
	public static void main(String args[]){
		ISubject sub = new ProxySubject(new RealSubject());
		//通过代理类对象发出,利用代理类来实现真实的业务
		sub.get();//讨债的核心操作
	}
}

运行结果:

总结:

  1. 以后如果是自己编写的接口如果想要取得接口的 实例化对象,第一反应写工厂类
  2. 简单工厂和工厂方法模式的不同在于前者生成产生产品的行为封装在一个方法中,根据参数的类型进行实例化,同时不存在抽象接口。而后者则增加了抽象工厂,通过实现不同的工厂方法来创建不同的产品,一个方法通常对应一个产品,这种方式相较于前者扩展性更高,在需求增加时完全符合开闭原则和依赖倒置原则

应用实例:

1、Windows 里面的快捷方式。

2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。

3、买火车票不一定在火车站买,也可以去代售点。

4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。

5、spring aop。

优点:

职责清晰、高扩展性、智能化

缺点:

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

使用场景:

按职责来划分,通常有以下使用场景:

1、远程代理。

2、虚拟代理。

3、Copy-on-Write 代理。

4、保护(Protect or Access)代理。

5、Cache代理。

6、防火墙(Firewall)代理。

7、同步化(Synchronization)代理。

8、智能引用(Smart Reference)代理。

到此这篇关于Java设计模式之代理模式详细解读的文章就介绍到这了,更多相关Java设计模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 1秒钟实现Springboot 替换/写入 word文档里面的文字、图片功能

    1秒钟实现Springboot 替换/写入 word文档里面的文字、图片功能

    这篇文章主要介绍了Springboot 替换/写入 word文档里面的文字、图片,1秒钟实现,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • JUnit 5中扩展模型的深入理解

    JUnit 5中扩展模型的深入理解

    几乎所有的Java 开发人员都会使用JUnit 来做测试,但其实很多自动化测试人员也会使用Junit 。下面这篇文章主要给大家介绍了关于JUnit 5中扩展模型的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-08-08
  • jedis的borrow行为方法源码解读

    jedis的borrow行为方法源码解读

    这篇文章主要为大家介绍了jedis的borrow行为方法源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot入门编写第一个程序Helloworld

    SpringBoot入门编写第一个程序Helloworld

    这篇文章是Springboot入门篇,来教大家编写第一个Springboot程序Helloworld,文中附有详细的示例代码,有需要的同学可以借鉴参考下
    2021-09-09
  • 总结Java调用Python程序方法

    总结Java调用Python程序方法

    这篇文章主要介绍了总结Java调用Python程序方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java在PowerPoint中添加上标和下标的实现方法

    Java在PowerPoint中添加上标和下标的实现方法

    当我们在演示文稿中添加商标、版权或其他符号时,我们可能希望该符号出现在某个文本的上方或下方。在Microsoft PowerPoint中,我们可以通过对符号应用上标或下标格式来实现这种效果,这篇文章主要介绍了Java在PowerPoint中添加上标和下标,需要的朋友可以参考下
    2022-10-10
  • Java操作FTP实现上传下载功能

    Java操作FTP实现上传下载功能

    这篇文章主要为大家详细介绍了Java如何通过操作FTP实现上传下载的功能,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-11-11
  • Java编码摘要算法实例解析

    Java编码摘要算法实例解析

    这篇文章主要介绍了Java编码摘要算法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java HashSet添加 遍历元素源码分析

    Java HashSet添加 遍历元素源码分析

    这篇文章主要为大家详细介绍了HashSet、HashMap底层添加、遍历元素的机制,追踪并分析源码,文中的示例代码讲解详细,希望对大学有所帮助
    2022-07-07
  • Spring详解使用注解开发流程

    Spring详解使用注解开发流程

    这篇文章主要为大家详细介绍了Spring如何使用注解开发,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-05-05

最新评论