代理模式解决不同请求和相应的目标对象的中介作用,实现面向接口编程,封装对象的行为实现
Java API中提供了对Proxy模式的支持,主要是通过反射(Reflect)包中的Proxy类和InvocationHandler接口实现,具体过程如下:
1) 实现InvocationHandler接口,在invoke()方法中实现代理类要完成的操作;
(2) 通过Proxy.newProxyInstance(ClassLoader loader,Class[]
interfaces,InvocationHandler h)方法生成一个代理类,从参数可以看出代理类将实现被代理对象的接口,而具体的实现过程是在上面实现的InvocationHandler.invoke()中定义的.
下面是代理模式的例子
对象的行为接口
package cn.oracle.computer;
public interface Computer {
/*
*zhangleming_2007-10-17
*/
public void buy();
}
package cn.oracle.computer;
/**
* @author zhangleming_2007-10-17
*
*/
接口实现
public class IBMComputer implements Computer {
/**
* zhangleming_2007-10-17
*/
public IBMComputer() {
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see cn.oracle.computer.Computer#buy()
*/
public void buy() {
System.out.println("you had bought a IBM <>");
}
}
代理实现
package cn.oracle.computer;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author zhangleming_2007-10-17
*
*/
public class ComputerProxy implements InvocationHandler {
private Object object;
/**
* zhangleming_2007-10-17
*/
public ComputerProxy() {
}
public Object bind(Object object){
this.object=object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
}
/* (non-Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] arg) throws Throwable {
Object result=method.invoke(object, arg);
System.out.println("赠送鼠标一个!");
return result;
}
}
测试
ComputerProxy cp=new ComputerProxy();
Computer c=(Computer) cp.bind(new IBMComputer());
c.buy();
分享到:
相关推荐
代理模式是设计模式中的一种结构型模式,它在对象交互中起到了中介的作用,允许通过代理对象来控制对...对于任何IT从业者而言,理解和掌握代理模式都是非常有益的,因为它可以帮助我们构建更加灵活、可扩展的软件系统。
在Java编程领域,设计模式是一种解决常见问题的...理解并熟练运用代理模式,能够帮助开发者更好地设计和优化系统,提高代码的灵活性和可扩展性。在实际项目中,可以根据需求选择静态代理或动态代理,灵活应对各种场景。
首先,让我们理解代理模式的基本结构。在代理模式中,有三个主要的角色:原始对象(Real Subject)、代理对象(Proxy)和客户端(Client)。原始对象是实际执行业务逻辑的对象,而代理对象则充当原始对象的代理,它...
在实际编程中,理解并熟练运用代理模式可以帮助我们更好地设计系统,提高代码的灵活性和可扩展性。通过代理,我们可以将复杂逻辑分解,使得代码更加模块化,同时也便于维护和测试。在学习代理模式时,可以尝试编写...
### 代理模式的理解 #### 一、代理模式概念与应用场景 代理模式是一种常见的设计模式,其核心在于通过引入代理对象来间接控制对真实对象的访问。这种模式在现实生活中有许多直观的例子,例如票务中介帮人购票,...
在软件工程中,设计模式是...通过理解并熟练运用代理模式,开发者能够编写出更灵活、可维护的代码,同时提高应用程序的性能和用户体验。在实际项目中,可以根据具体需求选择静态代理或动态代理,以达到最佳的设计效果。
代理模式是一种设计模式,它允许在不修改原有对象的情况下,为对象添加新的功能或行为。在Java编程中,代理模式有静态代理和动态代理两种实现方式。本文将主要探讨动态代理,这是一种更灵活且适用于多种场景的技术。...
代理模式在软件设计中是一种常用的设计模式,尤其在Android开发中,它可以帮助我们实现复杂的控制逻辑,隔离复杂性,以及提供额外的功能。在Android上下文中,代理模式常常用于数据加载、权限控制、事件处理等方面。...
代理模式是一种设计模式,属于结构型模式的一种,它在软件设计中扮演着非常重要的角色。代理模式的主要目的是为其他对象提供一种代理以控制对...理解并熟练运用代理模式对于提升软件设计的质量和可维护性具有重要意义。
理解并合理运用代理模式,可以提高代码的可维护性和可扩展性,是成为一名优秀的程序员必备的技能之一。在实际开发过程中,我们应该根据具体需求选择适合的代理类型,并灵活运用,以提升系统的整体性能和用户体验。
源码分析可以帮助我们更好地理解代理模式的实现细节,并能将其运用到自己的项目中,提升代码的可扩展性和可维护性。 通过学习和实践代理模式,开发者可以更好地理解和掌握面向对象设计原则,如单一职责原则和开闭...
代理模式是面向对象设计模式中的一个关键概念,它在软件工程中扮演着重要角色,用于在客户端和目标对象之间创建一种代理关系,以提供额外的功能...理解并熟练运用代理模式,可以帮助我们构建更灵活、可维护的软件系统。
代理模式其实用现实来理解就是班长模式,在一个班上所有的同学都可以入党,都可以参加“程序员”考试,都可以参加CET考试,但是这些考试都是由班长代报的名我们去做! 程序员的理解: 代理模式就是继承至同一父类的...
`代理模式之动态代理.exe`可能是一个视频播放程序,其中详细讲解了如何实现和理解动态代理。`代理模式之动态代理.ppt`则可能是一个PPT文档,提供了代理模式的理论介绍和代码示例。 4. **学习与实践** 要深入理解...
**Java设计模式——代理模式详解** 代理模式是软件设计模式中的一个重要组成部分,它在Java编程中扮演着举足轻重的角色。代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象可以控制对原...
**代理模式**是一种常用的设计模式,它在软件开发中扮演着重要的角色,特别是在对象的访问控制、性能优化、安全策略等方面...理解并熟练运用代理模式,能帮助开发者更好地设计和构建系统,提高代码的可维护性和扩展性。
**设计模式之代理模式** 代理模式是软件设计模式中的一种结构型模式,它在对象交互过程中引入一个代理,代理对象负责控制对原对象的访问。这种模式的主要目的是为了解耦,提供一种替代真实对象的方式,使得客户端...
SignalR提供了两种主要的工作模式:代理模式和非代理模式。这两种模式在实现上有所不同,各自具有优缺点,适用于不同的场景。 **1. 代理模式(Proxy Mode)** 在代理模式下,SignalR为每个Hub(服务端的业务逻辑...
总之,理解并掌握简单工厂模式、代理模式和策略模式,不仅有助于提高代码质量,还能帮助开发者更好地应对各种复杂的软件设计挑战。在不断学习和实践中,这些模式将成为解决实际问题的强大武器。