代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。
代理分静态代理和动态代理
一、静态代理
代码示例
接口
package com.jialinl;
public interface InterfaceUserManage {
public void AddUser();
public void DelUser();
public void ModifyUser();
}
目标类
package com.jialinl;
public class UserManageImp implements InterfaceUserManage {
@Override
public void AddUser() {
System.out.println("UserManageImp>>>>>AddUser");
}
@Override
public void DelUser() {
System.out.println("UserManageImp>>>>>DelUser");
}
@Override
public void ModifyUser() {
System.out.println("UserManageImp>>>>>ModifyUser");
}
}
代理类
package com.jialinl;
public class UserManageImpProxy implements InterfaceUserManage {
private InterfaceUserManage userManage;
public UserManageImpProxy(InterfaceUserManage userManage) {
this.userManage = userManage;
}
@Override
public void AddUser() {
try {
//记录日志等操作,完全可以使用代理来完成
System.out.println("start-->>addUser()");
userManage.AddUser();
System.out.println("success-->>addUser()");
}catch(Exception e) {
e.printStackTrace();
System.out.println("error-->>addUser()");
}
}
@Override
public void DelUser() {
//代理操作。。。。。
userManage.DelUser();
}
@Override
public void ModifyUser() {
//代理操作。。。。。
userManage.ModifyUser();
}
}
客户端调用
package com.jialinl;
public class Client {
public static void main(String[] args)
{
InterfaceUserManage userManager = new UserManageImpProxy(new UserManageImp());
userManager.AddUser();
}
}
输出结果
start-->>addUser()
UserManageImp>>>>>AddUser
success-->>addUser()
从UML图和代码分析可以看出,静态代理会建立大量的类,一个接口基本对应一个代理类,而且(代理操作)重复的代码在每个方法中都有出现,我们应该杜绝这种重复。下面就要看我们的动态代理。
二、动态代理
JDK动态代理能对实现了接口的类进行代理,采用JDK动态代理必须实现InvocationHandler接口,采用Proxy类创建相应的代理类。
代码示例:
接口
package com.jialin;
public interface InterfaceUserManage {
public void AddUser(String userName,String userAge);
public void DelUser();
public void ModifyUser();
}
目标类
package com.jialin;
public class UserManageImp implements InterfaceUserManage {
@Override
public void AddUser(String userName,String userAge) {
System.out.println("UserManageImp>>>>>AddUser("+userName+","+userAge+")");
}
@Override
public void DelUser() {
System.out.println("UserManageImp>>>>>DelUser");
}
@Override
public void ModifyUser() {
System.out.println("UserManageImp>>>>>ModifyUser");
}
}
代理
package com.jialin;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PublicProxy implements InvocationHandler {
private Object targetObject;
public Object newProxyInstance(Object targetObject) {
this.targetObject = targetObject;
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("开始调用目标方法-->>" + method.getName());
for (int i=0; i<args.length; i++) {
//打印调用目标方法的参数
System.out.println(args[i]);
}
try {
//调用目标方法
method.invoke(targetObject, args);
System.out.println("调用-->>" + method.getName()+"--成功");
}catch(Exception e) {
e.printStackTrace();
System.out.println("调用-->>" + method.getName()+"--失败");
throw e;
}
return null;
}
}
客户端
package com.jialin;
public class Client {
public static void main(String[] args)
{
PublicProxy publicProxy = new PublicProxy();
InterfaceUserManage userManager = (InterfaceUserManage)publicProxy.newProxyInstance(new UserManageImp());
userManager.AddUser("王五","17");
}
}
输出结果:
开始调用目标方法-->>AddUser
王五
17
UserManageImp>>>>>AddUser(王五,17)
调用-->>AddUser--成功
分享到:
相关推荐
全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...
为其他对象提供一个代理以控制对这个对象的访问。
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
代码仅供参考学习 。
NULL 博文链接:https://wy649898543.iteye.com/blog/1431997
java 代理模式demo ,主要就是对代理模式的一种实现过程,用于刚接触代理模式的人使用,里面介绍了两种代理模式,一种是静态代理,另一种是动态代理的实现Demo
设计模式C++学习之代理模式(Proxy)
2、代理模式(Proxy) 用意:为其它对象提供一种代理以控制对这个对象的访问
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
Android设计模式之代理模式(Proxy Pattern)
代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A...
2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器...
代理模式java代码 Proxy(4) 开发宝典......
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是...Strategy:java.util.Comparator就用到了它 代理模式 Proxy:学习Spring IoC容器必须掌握的模式 <br>
JAVA Proxy 代理模式
Proxy代理模式的经典实例(很有面向对象思想哦)。快速学会Proxy代理模式.
代理模式java代码 Proxy(1) java 学习必备......
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Proxy Pattern 代理模式 采用JAVA实现,可以下载看看。
代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...