代理模式:
我们先理解下面几个类,或许对你有所帮助。
1.InvocationHandler
在代理模式中我们需要实现该接口。该接口有一个方法invoke()方法,如下:
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
参数理解:
proxy:需要被调用的代理对象
method:代理对象的方法。
args:代理对象方法的参数。
大家可能在想,为什么一个类中有参数,有构造方法,有get和set器,有类名,有实现接口,父类等等,这里只有三个参数?
其实代理模式调用的是接口,接口有方法,接口名,接口的属性,方法的参数,所以invoke方法的参数可以满足代理。
2.Proxy
Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
废话不多说了 直接上代码分析。
package org.shen.proxy;
public interface Subject {
public String say(String name,int age);
}
Subject接口包含say方法,方法中有name和age属性。
package org.shen.proxy;
public class RealSubject implements Subject{
@Override
public String say(String name, int age) {
return name + " -- " + age;
}
}
package org.shen.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyInvocationHandler implements InvocationHandler{
private Object obj = null;
public Object bind(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object temp = method.invoke(obj, args);
return temp;
}
}
package org.shen.proxy;
public class TestProxy {
public static void main(String[] args) {
//使用代理
MyInvocationHandler demo = new MyInvocationHandler();
Subject sv = (Subject)demo.bind(new RealSubject());
String info = sv.say("shenyc", 2);
System.out.println(info);
System.out.println("----------");
//不使用代理
//如果不使用代理,就会去实现接口Subject,即创建一个实现类
//使用代理的话直接到代理那儿去拿接口。
Subject s = new Subject() {
@Override
public String say(String name, int age) {
return name + " " +age ;
}
};
String infoa = s.say("shenyc", 21);
System.out.println(infoa);
//new一个实例
Subject ss = new RealSubject();
String infob = ss.say("shenyc", 22);
System.out.println(infob);
}
}
输出结果:
shenyc -- 2
----------
shenyc 21
shenyc -- 22
分享到:
相关推荐
### Java设计模式之虚拟代理模式详解 #### 一、引言 在软件工程领域,设计模式作为一种被广泛接受的最佳实践,对于提高代码质量和可维护性起着至关重要的作用。其中,“代理模式”作为结构型设计模式之一,在解决...
在Java编程领域,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于软件开发中以提高代码的可读性、可维护性和可扩展性。代理模式是设计模式的一种,它提供了一种对目标对象进行增强或者控制访问的方式。...
Java设计模式之代理模式[收集].pdf
Java设计模式是软件开发中的重要概念,它提供了一套通用的解决方案模板,使得代码更加可复用、可扩展。在这些模式中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它允许我们为一个对象创建一个代理,该...
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在不修改原有对象的基础上,为对象添加额外的功能或者...
在这个“Java设计模式-代理模式例子”中,我们将深入探讨代理模式的概念、实现方式以及它在实际开发中的应用。 代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象控制对原对象的访问。在...
**Java设计模式——代理模式详解** 代理模式是软件设计模式中的一个重要组成部分,它在Java编程中扮演着举足轻重的角色。代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象可以控制对原...
JAVA设计模式之代理模式 代理模式是结构型模式之一,它主要解决了直接访问对象时带来的问题,如对象创建开销很大、某些操作需要安全控制、需要进程外的访问等。代理模式的目的是提供一种代理,以控制对这个对象的...
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
《Java设计模式》课程设计报告主要探讨了如何利用Java编程语言和MyEclipse集成开发环境来实现基于设计模式的西瓜市场系统。这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...
### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...