Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式之代理模式

设计模式之代理模式

作者头像
用户1215919
发布于 2018-02-27 02:51:13
发布于 2018-02-27 02:51:13
51100
代码可运行
举报
文章被收录于专栏:大大的微笑大大的微笑
运行总次数:0
代码可运行

       代理模式是一种注重过程的一种模式,在我们做某一具体事情之前或之后做一些辅助性的工作; 好处是将辅助工作从主要工作中抽离出来,但是又能协同工作, 我们只关心主要业务,对于不关心的事情交给代理来做,实现代理需要两个对象:被代理者,执行者

JDK中提供的动态代理(只能代理接口): 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IBuy {
	void pay();
}

public class Buy implements IBuy{

	@Override
    public void pay() {
	    System.out.println("订单支付完成!");
    }

public class PayProxy implements InvocationHandler {
	private Object obj;
	public PayProxy(Object target) {
	   this.obj = target;
    }

	public Object newInstance() {
		Class<? extends Object> cls = obj.getClass();
		return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object res = method.invoke(obj, args);
		System.out.println("----------");
		sendMsg();
		return res;
	}
	
	private void sendMsg(){
		System.out.println("买家已付款,请尽快发货!");
	}
}

--------------
IBuy buy = (IBuy)new PayProxy(new Buy()).newInstance();
		buy.pay();


console:
订单支付完成!
----------
买家已付款,请尽快发货!

CGLIB方式(代理具体类):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Buy{
    public void pay() {
	    System.out.println("订单支付完成!");
    }

}

public class CglibPayProxy implements MethodInterceptor {
	private static final CglibPayProxy PROXY = new CglibPayProxy();
	private CglibPayProxy() {
	}

	public static CglibPayProxy getInstance() {
		return PROXY;
	}

	@SuppressWarnings("unchecked")
	public <T> T newProxy(Class<T> clazz) {
		Enhancer enhancer = new Enhancer();
		 enhancer.setSuperclass(clazz);
		 enhancer.setCallback(this);
		 return (T) enhancer.create();
	}

	@Override
	public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3)
	        throws Throwable {
		Object res = arg3.invokeSuper(arg0, arg2);
		System.out.println("------------");
		sendMsg();
		return res;
	}

	private void sendMsg() {
		System.out.println("买家已付款,请尽快发货!");
	}


Buy buy = CglibPayProxy.getInstance().newProxy(Buy.class);
		buy.pay();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
代理一般可以分为三种:静态代理,动态代理,cglib代理,这种类型的设计模式属于结构型模式。
秦怀杂货店
2022/02/15
2500
设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
静态代理使用的时候,一般是定义接口或者父类,目标对象(被代理的对象)与代理对象都要实现相同的接口或者继承同样的父类。
秦怀杂货店
2021/03/03
3900
通俗易懂讲解一下代理模式
维基百科所说的优点抽象,这里我们简单来讲就是通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。
Dream城堡
2019/10/28
4980
通俗易懂讲解一下代理模式
设计模式之动态代理模式实战
昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要。动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用。 动态代理有两种试,一是通过JDK自带的API实现动态代理,二是通过别的字节码框架实现,如cglib。 需要注意的是JDK只能针对接口实现动态代理,不能代理普通类,使用具有局限性。而cglib可以代理接口及所有的普通类。 下面拿昨天保存用户信息的例子继续用动态代理来实现。 用户接口 public interface UserInterf
Java技术栈
2018/03/29
6700
Spring AOP 的实现机制
AOP(Aspect Orient Programming),一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。本文主要介绍Spring AOP的两种代理实现机制,JDK动态代理和CGLIB动态代理。
用户4283147
2022/10/08
2320
设计模式--代理模式详解
代理模式( Proxy Pattern )是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
向着百万年薪努力的小赵
2022/12/02
3160
设计模式--代理模式详解
Spring 代理模式知多少
代理模式是一种设计模式,提供了对目标对象额外的访问形式,即通过代理对象来实现对目标对象的访问,能够在不修改原目标对象的前提下提供额外的功能操作,实现对目标对象的功能扩展。
村雨遥
2020/08/18
3080
Spring 代理模式知多少
设计模式之代理模式
结构型模式之代理模式(静态代理) 由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。 代理其实是实现简介访问的媒介,当然在代理类中还可以在执行代理操作之前,之后,之中,环绕等执行相关动作。Spring 中面向切面编程就是这个原理 代理模式是一种应用很广泛的结构型设计模式,而且变化形式非常多,常见的代理形式包括远程代理、保护代理、虚拟代理、缓冲代理、智能引用代理等,后面将学习这些不同的代理形式 当使用代理类的时候, 真实类
爱撒谎的男孩
2018/05/25
4250
重温java代理模式
文章关键词:java代理,jdk动态代理,cglib代理,AOP,切面编程 (由于有代码,文章格式稍乱,请多原谅包涵,代码部分,小伙伴们可以直接点击去iteye博客上看:http://qindongliang.iteye.com/blog/2247670 文中也有百度网盘源码地址可供下载!) 今天,逛技术博客时,无意间发现了一篇有关动态代理模式的文章,感觉写的不错,自己正好也在巩固下基础知识,虽然实际工作中用代理的模式的不是特别多,那是因为你使用的框架,已经帮你封装好了,所以,你可能感觉不到,但是感
我是攻城师
2018/05/14
4830
Java 设计模式系列(9) —— 代理模式
1. 远程代理 远程代理就是将工作委托给远程对象(不同的进程,不同的机械) 来完成。
求和小熊猫
2021/01/07
3150
Java设计模式之代理模式
基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。 静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对
shaoshaossm
2022/12/27
1670
Java设计模式之代理模式
Spring AOP 的实现机制
AOP(Aspect Orient Programming),一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。
田维常
2019/07/16
2990
图解Java设计模式之代理模式
1)代理模式 :为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是 :可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 3)代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和 Cglib代理(可以在内存动态的创建对象,而不需要实现接口,它是属于动态代理的范畴)。 4)代理模式示意图
海仔
2020/03/27
4780
Spring AOP 的实现机制
AOP(Aspect Orient Programming),一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。
JavaFish
2019/10/17
3540
java设计模式之代理模式
代理模式 代理模式是常见设计模式的一种,代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 静态代理 理解设计模式是比较枯燥的,所以还是以举例子的方式来进行理解, 例如:公司开年会想找个明星来表演,那么并不会直接联系明星(主要还是联系不上),而是会联系明星的经纪人,明星就是被代理的对象,而经纪人就是代理对象。明星只需要准备来参加年会时应该表演什么节目就可以,其他的出场费之类的事情就交给
纪莫
2018/04/24
6760
设计模式之代理模式
九转成圣
2024/04/10
920
设计模式之代理模式
【Java设计模式】之代理模式
代理模式是Java常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。 为什么要采用这种间接的形式来调用对象呢?一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象来完成间接的访问。
用户5640963
2019/07/26
3500
【Java设计模式】之代理模式
设计模式-代理模式
日常生活中,有非常多的代办、代处理,比如代找货源、代租房、代记、代办证件等,代办人就是这个代理的对象,通过代理人来达到办理的目的或结果,并且得到一样的结果。就比如:你想喝多了,回家找一个滴滴代驾,把车开到目的地,一样实现到达的结果是一样。
逍遥壮士
2020/09/18
2960
设计模式-代理模式
设计模式——代理模式
设计模式——代理模式
Java架构师必看
2021/05/14
2760
设计模式——代理模式
设计模式实战-代理模式,来看看主公如何托孤
代理模式的定义其实比较简单:代理模式给某对象提供一个代理对象,由代理对象来控制对原对象的引用。生活中比较常见的代理模式的应用比如:火车票代购、代办保险、UU 跑腿、武侠片中的替身、nginx 反向代理等等这种类似于中介的模式统统可以归于代理模式。“本人”和“代理人”都是对象,“代理人”可以代替“本人”去完成一些工作,甚至是出色完成(超期完成)某些工作,这里的“出色完成”就可以理解为对原工作的一种增强实现,这点有点类似于装饰器模式。感兴趣的读者不妨翻到前面装饰器模式一节中了解下装饰器模式。
架构师修炼
2020/07/17
5780
相关推荐
设计模式【3.1】-- 浅谈代理模式之静态、动态、cglib代理
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验