`

设计模式之-代理模式-Proxy

 
阅读更多

使用代理模式之前需要知道代理模式能做什么? 能有哪些好处以及为什么要用代理模式.

 

Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)

以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理

 

下面是一个动态代理的实例:

package pack.java.proxy;
/**
 * 主题接口;
 * @ClassName: Subject 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author Administrator
 * @date 2015-4-28
 *
 */
public interface Subject {
	/**
	 * 业务处理方法;
	 * @Title: process 
	 * @Description: TODO(这里用一句话描述这个方法的作用) 
	 * @Params
	 * @throws
	 */
	String process();
}

 

建立一个实现接口的方法:

package pack.java.proxy;
/**
 * 实现主题接口
 * @ClassName: RealSubject 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author Administrator
 * @date 2015-4-28
 *
 */
public class RealSubject implements Subject{
	@Override
	public String process() {
		before();
		System.out.println("业务处理核心方法");
		after();
		return "处理方法.";
	}
	
	private void before(){
		System.out.println("业务处理之前需要执行的方法.");
	}
	
	private void after(){
		System.out.println("业务处理之后需要执行的方法.");
	}
}

 

建立一个用于代理处理类:

package pack.java.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 动态代理;
 * @ClassName: ProxyHander 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author zhouhaitao
 * @date 2015-4-28
 *
 */
public class ProxyHander implements InvocationHandler {
	private Subject subject;
	
	public void setSubject(Subject subject) {
		this.subject = subject;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		//动态调用;
		Object obj =  method.invoke(subject, args);
		return obj;
	}
}

 

建立一个测试类,用于测试结果:

package pack.java.proxy;
import java.lang.reflect.Proxy;

public class MainClass {

	/** 
	 * @Title: main 
	 * @Description: TODO(这里用一句话描述这个方法的作用) 
	 * @Params
	 * @throws 
	 */
	public static void main(String[] args) {
		ProxyHander proxyHander = new ProxyHander();
		Subject subject = new RealSubject();
		//设置要代理的对象;
		proxyHander.setSubject(subject);
		//实例化代理类;
		Subject sub = (Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(),RealSubject.class.getInterfaces(),proxyHander);
		String str = sub.process();
		System.out.println("返回结果:"+str);
	}

}

 

结果如下:

业务处理之前需要执行的方法.

业务处理核心方法

业务处理之后需要执行的方法.

返回结果:处理方法.

分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):提供一个统一的接口,用来访问子系统的一组接口。 - 适配器模式(Adapter):使两个接口不兼容的类能够协同工作。 ...

    设计模式--代理模式

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,允许我们通过一个代理类来控制对原对象的访问。在《设计模式:可复用面向对象软件的基础》(通常称为GoF设计模式)中,代理模式被定义为“为其他对象...

    C++设计模式--基于Qt4开源跨平台开发框架

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...

    JAVA设计模式例程-代理模式

    代理模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许我们为一个对象提供一个替代品或代表,以便在不改变原有对象的基础上增加额外的功能或控制访问。在这个"JAVA设计模式例程-代理模式"的压缩包中...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    设计模式之代理模式proxy

    **设计模式之代理模式(Proxy Pattern)** 设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的模板。代理模式是其中一种行为设计模式,它的核心思想是为一个对象提供一个替身或者代理,以控制对...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统更容易使用。 - 桥接模式(Bridge):将抽象部分与它的实现部分分离,使...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的核心内容之一。本文旨在深入解析这些设计模式,并通过C++实现来帮助读者更好地理解和应用这些模式。 #### 1. 创建型模式 创建型模式关注的是对象的...

    设计模式C++学习之代理模式(Proxy)

    代理模式是一种设计模式,它是结构型模式之一,主要用于在客户端和目标对象之间建立一个代理对象,以便控制对目标对象的访问。在C++中,代理模式可以用来为其他对象提供一种代理以控制对这个对象的访问,或者增加...

    Java设计模式-代理模式例子

    在这个“Java设计模式-代理模式例子”中,我们可能能看到如何创建静态代理类,以及如何利用`Proxy`和`InvocationHandler`创建动态代理。源码分析可以帮助我们更好地理解代理模式的实现细节,并能将其运用到自己的...

    设计模式-代理模式

    描述中提到的“重写了方法签名”,这是代理模式的一个关键步骤,通过定义代理协议(Protocol),并让目标对象(Target)和代理对象(Proxy)遵循这个协议,代理对象可以实现目标对象的方法,但可以添加额外的行为...

    设计模式之代理模式proxy.zip

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色。代理模式允许我们为一个对象创建一个代理,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式的主要...

    java设计模式视频教程-代理模式.rar

    在这个“java设计模式视频教程-代理模式.rar”压缩包中,包含了一部关于代理模式的视频教程,以及相关的课件和示例代码。 代理模式的核心思想是通过代理类来代理原始对象,为原始对象提供一个替代品或占位符,以...

    优秀的设计模式示例-静态代理模式

    静态代理模式是设计模式中的一种,属于结构型模式,主要用在我们想要在不修改原有对象的基础上,为对象添加额外功能或者控制对象的行为时。在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码...

    Java设计模式-代理模式

    代理模式是这些设计模式中的一种,它为其他对象提供一种代理以控制对这个对象的访问。代理模式的核心思想是在目标对象和客户端之间插入一个代理对象,代理对象可以扩展目标对象的功能,同时也能控制对目标对象的访问...

    apache开源项目源码commons-proxy-1.0-src(全部高质量代理模式proxy的java源程序)

    java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其优良的代码...

Global site tag (gtag.js) - Google Analytics