IHello.java
package org.springsource.proxy;
/**
* @author billzhang
*
*/
public interface IHello {
void sayHello(String name);
}
HelloImpl.java
package org.springsource.proxy;
/**
* @author billzhang
*
*/
public class HelloImpl implements IHello {
public void sayHello(String name) {
System.out.println("Hello "+name);
}
}
Static Proxy:
StaticProxy.java
package org.springsource.proxy.stac;
import org.springsource.proxy.IHello;
/**
* @author billzhang
*
*/
public class StaticProxy implements IHello{
private IHello hello;
public StaticProxy(IHello hello) {
super();
this.hello = hello;
}
public void sayHello(String name){
System.out.println("Start........");
hello.sayHello(name);
System.out.println("End..........");
}
}
从上面我们看到代理对象的一个接口只服务于一种类型的对象,如果您要代理的方法很多,势必要为每个方法进行代理,static proxy 在程式规模稍大时就必定无法胜任。
Java在JDK 1.3之后加入协助开发Dynamic Proxy功能的类别,我们不必为特定对象与方法编写特定的代理,使用Dynamic Proxy,可以使得一个handler服务于各个对象,首先,一个handler必须实现 java.lang.reflect.InvocationHandler:
DynamicProxy.java
package org.springsource.proxy.dynamic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author billzhang
*
*/
public class DynamicProxy implements InvocationHandler{
private Object delegate;
public Object bind(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
try {
System.out.println("Start "+method.getName()+"()");
result = method.invoke(delegate, args);
System.out.println("End "+method.getName()+"()");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
package org.springsource.proxy.main;
import org.springsource.proxy.HelloImpl;
import org.springsource.proxy.IHello;
import org.springsource.proxy.dynamic.DynamicProxy;
/**
* @author billzhang
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
//static proxy
/*IHello hello = new StaticProxy(new HelloImpl());
hello.sayHello("Bill");*/
//dynamic proxy
DynamicProxy dp = new DynamicProxy();
IHello hello = (IHello) dp.bind(new HelloImpl());
hello.sayHello("Bill");
}
}
分享到:
相关推荐
8. **代理模式(Proxy)**:为其他对象提供一种代理以控制对这个对象的访问。常用于远程代理、虚拟代理、权限控制等场景。 9. **桥接模式(Bridge)**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。有...
在这个名为"JAVA design pattern-java设计模式"的CHM文件中,我们可能找到了关于如何在Java开发中应用设计模式的详细信息。 设计模式通常分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建,如单例...
这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...
Learn how to implement design patterns in Java: each pattern in Java Design Patterns is a complete implementation and the output is generated using Eclipse, making the code accessible to all....
7. **代理模式(Proxy Pattern)**: - 定义:为其他对象提供一种代理以控制对这个对象的访问。 - 应用场景:远程调用、虚拟代理、缓存等。 #### 知识点四:设计模式在Java项目中的应用 1. **提高代码的可维护性...
3. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 4. 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。 5. 外观模式(Facade Pattern):为子系统中的一...
书中主要针对Java语言进行了讲解,但设计模式本身是跨语言的,因此对于任何面向对象编程语言的学习者都有很高的参考价值。 设计模式是软件开发中的经验总结,是对在特定上下文中经常出现的问题的解决方案。它们提供...
本资源"designpattern.zip"包含了对Java中23种经典设计模式的详细讲解和代码实例,对于中高级Java工程师来说,是提升开发技能的必备学习材料。 设计模式通常分为创建型、结构型和行为型三大类。创建型设计模式关注...
CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...
实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...
本资料包“JAVA 23种设计模式(全).Design Pattern_Java模式”涵盖了所有23种经典的GOF(GoF,Gang of Four)设计模式,旨在帮助开发者深入理解和应用这些模式。 首先,我们来看一下23种设计模式的分类: 1. **创建...
在Java中,可以使用静态代理或动态代理(Java Proxy类)实现。 7. **观察者模式**(Observer):定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 8. **...
本项目"JAVA_DesignPattern_Problem"显然关注的是Java编程中的设计模式问题。 设计模式分为三大类:创建型、结构型和行为型。创建型设计模式如单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract ...
#### 代理模式(Proxy) 代理模式为另一个对象提供一个代理或占位符,以控制对这个对象的访问。这可以用于远程代理、虚拟代理等多种用途。 ### 行为型模式 行为型模式专注于对象之间的职责分配,以及算法的封装。...
"DesignPattern4J: java设计模式练习"项目显然专注于通过实际的Java代码来学习和应用这些模式。 设计模式分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式...
"DesignPattern.rar"这个压缩包文件显然包含了关于Java设计模式的实例代码,这对于初学者和有经验的开发者来说都是极好的学习资源。通过这些小Demo,你可以亲身体验和理解设计模式在实际项目中的应用。 1. **单例...
这本书主要针对Java编程语言,深入浅出地讲解了设计模式这一核心软件工程概念。设计模式是经验丰富的开发者在解决常见问题时形成的可重用解决方案,它们代表了在特定上下文中最佳的编程实践。 1. **单例模式...
本资料包“DesignPattern.zip”包含了Java、C++和Golang三种编程语言的设计模式实现,这对于想要深入理解这些语言的开发者来说是非常宝贵的资源。 1. **设计模式分类**: 设计模式通常分为三类:创建型、结构型和...
##### 4.7 代理模式 (Proxy Pattern) 代理模式为其他对象提供一个代理以控制对这个对象的访问。 - **目的**:为其他对象提供一个代理以控制对这个对象的访问。 - **优点**:客户端可以通过代理间接地访问目标对象...