代理的方法是有两种
一种是静态的代理方法
还有一种是动态的代理方法
首先研究的是静态的代理的方法 它主要体现的是代理模式的思想
首先是定义一个实现业务的接口
public interface UserManager {
public void setUserName();
public void setUserPassword();
public void setAddress();
}
然后是定义一个类去实现这些接口
public class UserManagerImpl implements UserManager {
@Override
public void setAddress() {
System.out.println("-----setAddress Successfully!-------");
}
@Override
public void setUserName() {
System.out.println("-----setUserName Successfully!-------");
}
@Override
public void setUserPassword() {
System.out.println("-----setUserPassword Successfully!-------");
}
}
然后是一个代理的实现类 既然是代理类当然是要也实现这些业务否者就不能实现代理功能了
public class UserManagerProxy implements UserManager {
private UserManager manager;
public UserMnaagerProxy(UserManager manager){
this.manager = manager
}
@Override
public void setAddress() {
check();
manager.setAddress();
}
@Override
public void setUserName() {
check();
this.manager.setUserName();
}
@Override
public void setUserPassword() {
check();
this.manager.setUserPassword();
}
public void check(){
System.out.println("-----check Successfully!-------");
}
}
客户端的代码就是
import org.util.Impl.UserManagerImpl;
import org.util.interfaces.UserManager;
public class UserManagerClient {
public static void main(String[] args) {
UserManager proxy = new UserManagerProxy(new UserManagerImpl());
proxy.setAddress();
proxy.setUserPassword();
proxy.setUserName();
}
}
这就是静态代理方法了 他不适合适用于大的代码量就是说很多的业务方法都必须的进行check();这就比较麻烦了 但是java 的包里给我们实现了一个动态的实现代理的模式体现了aop的思想
首先是他的接口的代码是 实现接口的业务类相同的就不写了都是相同的 就不再写代码了
就在上面
然后就是他的一个包含在动态代理类里的一个实现 (调用处理程序 接口)的实现类并且我们可以将这个代理类的实例化在这个类中完成 其实这都是一步一步的走的
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserManagerInvoke implements InvocationHandler {
public Object targetObj ;
public Object newProxy(Object targetObj){
this.targetObj = targetObj;
/**
* 创建一个目标类的Proxy实例
* 并且将一个实现InvocationHandler类的实例的参数
* 传进对这个Proxy对象将成员进行初始化
* 从下面的例子中可以看出这个类主要的思想就是AOP思想
* 就是为第三个参数(实现InvocationHandler类的实例的参数)
* 是最重要的 这个参数类的实例会实现在invoke()中整个的方法
* 约定的是当你在使用这个代理类的时候会自东进行jinvoke()的方法
*/
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
targetObj.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
checkSecurity();
Object result = null;
try{
result = method.invoke(this.targetObj, args);
}catch(Exception e ){
e.printStackTrace();
}
return result;
}
public void checkSecurity(){
System.out.println("-------checkSecurity Successfully!!!--------");
}
}
关于java.lang.reflect.Proxy 的介绍你可以看看jdk的api文档这里不再细说了
然后是client的代码
import org.util.Impl.UserManagerImpl;
import org.util.aop.UserManagerInvoke;
import org.util.interfaces.UserManager;
public class UserManagerClient {
public static void main(String[] args) {
UserManagerInvoke hander = new UserManagerInvoke();
UserManager proxy = (UserManager) hander.newProxy(new UserManagerImpl());
//由proxy的实现机制可以看出 这个代理类每一次调用代理的方法就会自动转到
//实现InvocationHandler接口的类中的invoke();方法中运行
proxy.setAddress();
proxy.setUserPassword();
proxy.setUserName();
}
}
运行的结果就是
-------checkSecurity Successfully!!!--------
-----setAddress Successfully!-------
-------checkSecurity Successfully!!!--------
-----setUserPassword Successfully!-------
-------checkSecurity Successfully!!!--------
-----setUserName Successfully!-------
相比较而言第二种方式就有更灵活的代理机制了 也体现了aop的切面的思想
分享到:
相关推荐
这个"代理模式小例子"的代码可能展示了如何创建一个代理类来代表一个真实对象。代理类通常会实现与真实对象相同的方法,但在调用这些方法之前或之后,可以添加额外的操作。例如,代理可能在调用真实对象的方法前进行...
在这个“Java设计模式-代理模式例子”中,我们将深入探讨代理模式的概念、实现方式以及它在实际开发中的应用。 代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象控制对原对象的访问。在...
这份压缩包文件"Proxy"包含了关于C#中代理模式的基本实现和一个实际应用案例。 代理模式的核心概念是代理类和真实对象(或称目标对象)。代理类持有目标对象的引用,并提供了与目标对象相同的接口。客户端通过与...
代理模式是设计模式的一种,它提供了一种对目标对象进行增强或者控制访问的方式。在本实例中,我们将深入探讨Java中的代理模式及其应用。 代理模式的核心思想是为一个对象创建一个代理对象,这个代理对象在客户端和...
代理模式是设计模式中的一种结构型模式,它在对象交互中起到了中介的作用,允许通过代理对象来间接调用目标对象,从而提供了额外的功能或者控制访问。这种模式的主要优点在于能够扩展对象的功能,同时又能保持原有...
代理模式是一种设计模式,它在软件工程中扮演着重要的角色,允许我们为其他对象提供一个替代接口,以控制对原始对象的访问。这种模式的主要目的是为了增加灵活性、安全性或者在不修改原有对象的情况下,增强或扩展其...
Java代理模式 事例很生动,非常容易理解,推荐给大家。
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的主要作用是,用来控制真实对象的访问权限,也就是完全对外隐藏真实对象。以及在调用真实对象时,代理还可以额外的处理另外的事。 比如下面...
自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考 自己写的一个代理模式的示例,供大家参考
例如,对于一个Web服务,我们可能需要在用户访问资源前进行身份验证,这就是一个很好的使用代理模式的例子。通过创建一个代理类,它首先检查用户权限,如果权限合法,则调用实际的服务处理请求。 总的来说,代理...
在Java编程中,代理模式是一种常用的面向对象设计模式,它允许我们为一个对象提供一个代理以控制...通过学习和实践这些例子,你可以深入理解这三种代理模式的实现细节和应用场景,从而更好地在实际项目中应用代理模式。
代理模式在软件设计中是一种常用的设计模式,尤其在Android开发中,它可以帮助我们实现复杂的控制逻辑,隔离复杂性,以及提供额外的功能。在Android上下文中,代理模式常常用于数据加载、权限控制、事件处理等方面。...
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
根据提供的信息,我们可以看出这是一本关于设计模式的书籍,旨在通过生动的例子来解释各种设计模式的概念、用途及实现方式。接下来,我们将详细介绍书中部分章节的设计模式知识点。 ### 第1章:策略模式(Strategy ...
### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...
在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码实例,旨在帮助开发者更好地理解和应用静态代理模式。 静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),...
代理模式是一种设计模式,它是结构型模式之一,主要用于在客户端和目标对象之间建立一个代理对象,以便控制对目标对象的访问。在C++中,代理模式可以用来为其他对象提供一种代理以控制对这个对象的访问,或者增加...
Proxy代理模式是面向对象设计模式中的重要组成部分,它在软件工程中扮演着关键角色,尤其在Java编程中。代理模式的主要目的是为一个对象提供一个替身或者占位符,以便控制对这个对象的访问。这种设计模式允许我们...
下面将详细探讨代理模式的原理、结构以及在实际应用中的例子。 代理模式的核心概念是代理(Proxy),它充当原始对象(Real Subject)的替身,向客户端提供与原始对象相同的接口。客户端通过代理与真实对象交互,而...
用java实现代理模式,使用房屋中介的现实例子进行代理模式的说明