- 浏览: 415189 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
liyuanhoa_:
...
struts2.0中struts.xml配置文件详解 -
chenmingde:
...
Velocity应用(一) -
weizhikai_ai:
第二十六,当一个线程进入一个对象的一个synchronized ...
Java常见面试题(含答案) -
Aurora_lr:
...
Spring宠物商店学习笔记(一) - -
zs911zs:
all copy from http://www.iteye ...
Mule入门文档
1. 意图:
为其他对象提供一种代理以控制对这个对象的访问
2. 别名:
surrogate替身
3. 动机
按需创建, 替代对象
4. 适用性
* 远程代理
* 虚代理
* 保护代理
* 智能指引
5. 结构
6. 实例
Java代码
package net.yeah.fanyamin.pattern.proxy;
/**
* @author walter
*/
interface Greet {
void sayHello(String name);
void goodBye();
}
class GreetImpl implements Greet {
public void sayHello(String name) {
System.out.println("Hello " + name);
}
public void goodBye() {
System.out.println("Good bye.");
}
}
public class SimpleProxy implements Greet {
private Greet greet = null;
SimpleProxy(Greet greet) {
this.greet = greet;
}
public void sayHello(String name) {
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye() {
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = new SimpleProxy(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
package net.yeah.fanyamin.pattern.proxy;
/**
* @author walter
*/
interface Greet {
void sayHello(String name);
void goodBye();
}
class GreetImpl implements Greet {
public void sayHello(String name) {
System.out.println("Hello " + name);
}
public void goodBye() {
System.out.println("Good bye.");
}
}
public class SimpleProxy implements Greet {
private Greet greet = null;
SimpleProxy(Greet greet) {
this.greet = greet;
}
public void sayHello(String name) {
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye() {
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = new SimpleProxy(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
利用JDK中的动态代理
Java代码
/**
*
*/
package net.yeah.fanyamin.pattern.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author walter
*/
public class DebugProxy implements java.lang.reflect.InvocationHandler {
private Object obj;
public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new DebugProxy(obj));
}
private DebugProxy(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Object result;
try {
System.out.println("--before method " + m.getName());
result = m.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
} finally {
System.out.println("--after method " + m.getName());
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = (Greet) DebugProxy.newInstance(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
/**
*
*/
package net.yeah.fanyamin.pattern.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author walter
*/
public class DebugProxy implements java.lang.reflect.InvocationHandler {
private Object obj;
public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new DebugProxy(obj));
}
private DebugProxy(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Object result;
try {
System.out.println("--before method " + m.getName());
result = m.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
} finally {
System.out.println("--after method " + m.getName());
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = (Greet) DebugProxy.newInstance(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
为其他对象提供一种代理以控制对这个对象的访问
2. 别名:
surrogate替身
3. 动机
按需创建, 替代对象
4. 适用性
* 远程代理
* 虚代理
* 保护代理
* 智能指引
5. 结构
6. 实例
Java代码
package net.yeah.fanyamin.pattern.proxy;
/**
* @author walter
*/
interface Greet {
void sayHello(String name);
void goodBye();
}
class GreetImpl implements Greet {
public void sayHello(String name) {
System.out.println("Hello " + name);
}
public void goodBye() {
System.out.println("Good bye.");
}
}
public class SimpleProxy implements Greet {
private Greet greet = null;
SimpleProxy(Greet greet) {
this.greet = greet;
}
public void sayHello(String name) {
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye() {
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = new SimpleProxy(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
package net.yeah.fanyamin.pattern.proxy;
/**
* @author walter
*/
interface Greet {
void sayHello(String name);
void goodBye();
}
class GreetImpl implements Greet {
public void sayHello(String name) {
System.out.println("Hello " + name);
}
public void goodBye() {
System.out.println("Good bye.");
}
}
public class SimpleProxy implements Greet {
private Greet greet = null;
SimpleProxy(Greet greet) {
this.greet = greet;
}
public void sayHello(String name) {
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye() {
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = new SimpleProxy(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
利用JDK中的动态代理
Java代码
/**
*
*/
package net.yeah.fanyamin.pattern.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author walter
*/
public class DebugProxy implements java.lang.reflect.InvocationHandler {
private Object obj;
public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new DebugProxy(obj));
}
private DebugProxy(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Object result;
try {
System.out.println("--before method " + m.getName());
result = m.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
} finally {
System.out.println("--after method " + m.getName());
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = (Greet) DebugProxy.newInstance(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
/**
*
*/
package net.yeah.fanyamin.pattern.proxy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author walter
*/
public class DebugProxy implements java.lang.reflect.InvocationHandler {
private Object obj;
public static Object newInstance(Object obj) {
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new DebugProxy(obj));
}
private DebugProxy(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Object result;
try {
System.out.println("--before method " + m.getName());
result = m.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
} finally {
System.out.println("--after method " + m.getName());
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
Greet greet = (Greet) DebugProxy.newInstance(new GreetImpl());
greet.sayHello("walter");
greet.goodBye();
}
}
发表评论
-
java关键字native,volatile,transient
2009-02-25 15:12 13681.volatile:为了获得最佳速度,java允许线程保存共 ... -
quartz+spring
2009-02-12 14:48 3364Quartz 是一个强大的企业级 Schedule 工具,也是 ... -
Java虚拟机(JVM)参数配置说明
2009-01-08 16:02 2625在Java、J2EE大型应用中,JVM非标准参数的配置直接关系 ... -
@SuppressWarnings 详解
2009-01-08 15:27 990@SuppressWarnings J2SE 提供的最后一个 ... -
批量反编译java类文件
2009-01-08 10:30 1573所使用的软件是 DJ Java Decompiler 3.7。 ... -
LDAP定义
2008-12-23 10:20 1185LDAP是轻量目录访问协议 ... -
JMS总结和参考资料
2008-12-22 17:33 1820结束语 第 1 页(共3 页) 本教程提供了对 Ja ... -
JMS--Pub/Sub编程
2008-12-22 17:27 1109相同又不同 第 1 页(共1 页) 附录中有这两个 ... -
JMS--Pub/Sub接口
2008-12-22 17:24 1903介绍 第 1 页(共7 页) 现在让我们来查看 Pub/s ... -
JMS点对点编程
2008-12-22 17:15 1643介绍 第 1 页(共10 页) ... -
JMS点对点接口
2008-12-22 17:03 1492介绍 第 1 页(共8 页) ... -
JMS用公用接口进行客户机编程
2008-12-22 17:01 975绍 第 1 页(共11 页) 在这一节中,我们将查看 ... -
JMS公用接口
2008-12-19 18:01 1078在这一节中,我们将介绍 JMS 客户机编程的每一个重要 JMS ... -
JMS学习教程概述
2008-12-19 17:55 3128应用程序 第 1 页(共15 页) http://liy ... -
JNDI定义
2008-12-19 09:56 1061Java术语 英文全称是:Java Naming and ... -
Java 编程的动态性,第 8 部分: 用代码生成取代反射
2008-12-18 11:52 1011运行时代码生成为获得 ... -
Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码
2008-12-18 11:51 1261Apache BCEL 让您深入 JVM 汇编语言进行类操作的 ... -
Java 编程的动态性,第 6 部分: 利用 Javassist 进行面向方面的更改
2008-12-18 11:50 1136用 Javassist 进行字节码 ... -
Java 编程的动态性,第 5 部分: 动态转换类
2008-12-18 11:48 1055学习如何在使用 Javassist ... -
Java 编程的动态性, 第四部分: 用 Javassist 进行类转换
2008-12-18 11:47 1057用 Javassist 转换字节码中的方法 文档 ...
相关推荐
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
Java代理模式是一种设计模式,它允许我们为一个对象创建一个代理,这个代理对象可以在调用原始对象的方法之前或之后执行额外的操作。代理模式在软件工程中有多种应用,例如:增加安全控制、性能监控、事务管理等。...
C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...
代理模式分为静态代理和动态代理,其中动态代理在Java中可以通过InvocationHandler接口和Proxy类实现。 2. **单例模式**: 单例模式确保一个类只有一个实例,并提供全局访问点。这种模式常用于控制资源的共享,如...
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...
7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 行为型模式涉及对象之间的责任分配,包括: 1. 责任链模式(Chain of Responsibility):将请求沿着处理者链传递,直到有对象处理为止。 2....
装饰模式(Decorator)可以在运行时动态地给对象添加新的行为或责任,而代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。 行为型模式关注对象之间的交互和职责分配。策略模式(Strategy)定义了一...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
2. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 3. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。 4. 组合模式(Composite Pattern):将对象...
在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
【标题】"Spring学习笔记(七)"主要涵盖了Spring框架中的一个重要概念——代理模式。在Spring中,代理模式被广泛应用于AOP(面向切面编程)中,为对象提供额外的功能,如事务管理、日志记录等。这篇笔记可能详细解析...
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
在Qt中,这一模式被扩展和细化,形成了Model-View-ProxyModel-Delegate-SelectionModel等组件的体系。 **Model**: 模型是数据的源头,它负责存储和管理实际的数据。数据可以来源于各种数据源,如文件、数据库查询...
在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...