`
kangsg219
  • 浏览: 123485 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

学习笔记之代理模式(2)

阅读更多
在动态代理中动态代理类不再服务于特定的对象与接口,而是服务于他绑定的对象,绑定是动态的。而实际工作的类也不插入任何和业务无关的动作。要调用是,绑定他即可。

接口类:IBuySome.java

package org.kangsg219.DynamicProxy;

public interface IBuySome {
	public void buy();
	public void buy(String something);
}


被代理对象:BuySomeImpl.java

package org.kangsg219.DynamicProxy;

public class BuySomeImpl implements IBuySome {

	public void buy() {
		System.out.println("买个手机。(BuySomeImpl类中的buy方法。)");
	}
	
	public void buy(String something) {
		System.out.println("买个"+something+"。(BuySomeImpl类中的buy方法。)");

	}
	
}



代理对象:BuySomeProxy.java

package org.kangsg219.DynamicProxy;

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

public class BuySomeProxy implements InvocationHandler{
	
	private Object obj;
	
	public Object bind(Object obj){
		this.obj=obj;
		/**
		 * java.lang.reflect.Proxy中的方法
		 * arg0 - 定义代理类的类加载器
		 * arg1 - 代理类要实现的接口列表
		 * arg2 - 指派方法调用的调用处理程序
		 */
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);		
	}
	
	/**
	 * 实现InvocationHandler接口中的方法。
	 * arg0:被绑定对象。
	 * arg1:被绑定对象的方法(如TestMain中的buy方法)。
	 * arg2:被绑定对象的方法的参数组,是个可变参数(如buy中的String类型的"手机");
	 *      如果没有参数则arg2为null。
	 */
	public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
		
		this.beforBuy();

		return arg1.invoke(obj, arg2);//java.lang.reflect.Method类中的方法
	}
	
	public void beforBuy(){
		System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
	}
	public void afterBuy(){
		System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
	}
}


测试类:TestMain.java

package org.kangsg219.DynamicProxy;

/**
 * @author kangsg219
 *
 *	测试类
 */
public class TestMain {
	
	public static void main(String[] args) {
		
		BuySomeProxy bsp=new BuySomeProxy();
		
		IBuySome ibs=(IBuySome)bsp.bind(new BuySomeImpl());

		ibs.buy("手机");//调用BuySomeProxy中的invoke方法。	
		
	}

}


运行结果:

在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
买个手机。(BuySomeImpl类中的buy方法。)
分享到:
评论

相关推荐

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    23种设计模式学习笔记

    10. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、虚拟代理等。 11. **外观模式**:为一个复杂的子系统提供一个简单的接口,使得客户端不必了解子系统的内部细节。 12. **享元...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    HeadFirst设计模式学习笔记

    11. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在需要添加额外功能或控制访问权限时非常有用。 12. **责任链模式**:处理请求的发送者将请求传递给一系列的处理者,每个处理者都可以选择处理或...

    《C++20设计模式》学习笔记-第12章代理模式-配套代码

    《C++20设计模式》学习笔记-第12章代理模式-配套代码

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    java学习笔记及设计模式

    6. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程调用、安全控制等。 7. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

    16-Java代理模式的学习笔记1

    Java代理模式是一种设计模式,它允许我们为一个对象创建一个代理,这个代理对象可以在调用原始对象的方法之前或之后执行额外的操作。代理模式在软件工程中有多种应用,例如:增加安全控制、性能监控、事务管理等。...

    C#设计模式学习笔记

    C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...

    设计模式学习笔记及其模式特点总结

    代理模式分为静态代理和动态代理,其中动态代理在Java中可以通过InvocationHandler接口和Proxy类实现。 2. **单例模式**: 单例模式确保一个类只有一个实例,并提供全局访问点。这种模式常用于控制资源的共享,如...

    Spring学习笔记(13)----动态代理模式分析演示

    在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    Spring学习笔记(12)----静态代理模式分析演示

    在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...

    300Java设计模式部分学习笔记

    2. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 3. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。 4. 组合模式(Composite Pattern):将对象...

    java设计模式学习笔记,以及各种模式的代码实现

    9. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。它可以用于远程代理、虚拟代理、缓存等。 10. **桥接模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种设计模式属于结构型...

    MyBatis学习笔记—代理DAO开发

    ### MyBatis学习笔记——代理DAO开发 #### 一、概述 在Java开发领域中,MyBatis是一款非常流行的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...

    Java学习笔记(源码)

    3. **异常处理**:Java的异常处理机制是其强大的特性之一,学习笔记会讲解如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的错误。 4. **集合框架**:Java集合框架是存储和操作对象的重要工具,...

    设计模式学习笔记

    7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 行为型模式涉及对象之间的责任分配,包括: 1. 责任链模式(Chain of Responsibility):将请求沿着处理者链传递,直到有对象处理为止。 2....

Global site tag (gtag.js) - Google Analytics