`

java 设计模式学习笔记六 proxy代理模式

阅读更多



proxy代理模式
为其他对象提供一种代理以控制对这个对象的访问
应用场景:
授权机制 (论坛中控制用户访问的权限)
不能直接操作的对象
代理中的三个角色:


示例代码如下:
抽象角色:
/**
* 抽象类
*
* @time 下午09:51:09
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public abstract class Subject {
public abstract String request();
}
代理角色:

/**
* 代理对象
*
* @time 下午09:54:09
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class ProxySubject extends Subject {
// 真实对象
private RealSubject realSubject;


/**
* 构造器
*
* @param realSubject
*/
public ProxySubject() {
// 初始化真实对象
if (null == realSubject) {
this.realSubject = new RealSubject();
}
}


@Override
public String request() {
return realSubject.request();
}
}






真实角色:
/**
* 真实角色
*
* @time 下午09:52:37
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class RealSubject extends Subject {
/**
* 构造器
*/
public RealSubject() {
}


@Override
public String request() {
return "realSubject request!";
}
}




测试方法:
/**
* 测试代理方法
*
* @time 下午09:57:31
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class TestProxy {
public static void main(String[] args) {
Subject subject = new ProxySubject();
System.out.println("" + subject.request());
}
}


java动态代理(nynamic proxy程序运行时生成的class):
invocationHandler:
proxy:


示例代码如下:


/**
* 抽象接口
*
* @time 下午10:09:02
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public interface Subject {
public String request();
}




/**
* 真实角色
*
* @time 下午10:10:05
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class RealSubject implements Subject {


/**
* 构造器
*/
public RealSubject() {
}


@Override
public String request() {
return "realSubject request!";
}
}




/**
* 动态代理类
*
* @time 下午10:11:59
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class DynamicSubject implements InvocationHandler {
// 真实对象
Object object;


/**
* 构造器
*/
public DynamicSubject() {


}


public DynamicSubject(Object object) {
this.object = object;
}


/**
* 实现类
*
* @proxy 代理类(真实对象)
* @method 代理方法(request方法)
* @args 参数数组
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)


throws Throwable {
method.invoke(object, args);
return null;
}
}




/**
* 测试动态代理
*
* @time 下午10:18:04
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class TestDynamicProxy {


/**
* 感觉实质上还是用了类加器来完成代理对象的创建
*
* @param args
*/
public static void main(String[] args) {
// 真实对象
RealSubject realSubject = new RealSubject();


InvocationHandler handler = new DynamicSubject


(realSubject);
Class clazz = handler.getClass();


// 生成代理对象
Subject subject = (Subject) Proxy.newProxyInstance


(clazz.getClassLoader(), clazz.getInterfaces(), handler);
System.out.println(subject.request());
}
}

分享到:
评论

相关推荐

    图解java设计模式_学习笔记_java开发

    这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...

    Java 版设计模式学习笔记-java-design-patterns.zip

    这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...

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

    以下是一些在尚学堂300Java设计模式部分学习笔记中涉及的设计模式的知识点: 创建型模式: 创建型模式主要解决对象创建的问题,确保系统的灵活性和封装创建细节。学习笔记中提到了5种创建型模式: 1. 单例模式...

    图解Java设计模式笔记总结word版本.rar

    本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...

    Java设计模式尚硅谷笔记

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、灵活性和可维护性。在Java编程中,设计模式被视为良好编程实践的重要组成部分,可以帮助开发者创建更加高效...

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

    这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...

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

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

    java23种设计模式,3套视频加1个ppt

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、灵活性和可维护性。23种设计模式被广泛接受并分类为三大类:创建型模式(Creational Patterns)、结构型...

    设计模式学习笔记

    设计模式的学习不仅帮助我们编写更可维护、可扩展的代码,还能提高团队间的沟通效率,因为它们提供了通用的语言和解决方案。在实际开发中,灵活运用这些设计模式可以有效解决设计问题,提升代码质量。因此,深入理解...

    JAVA与模式读书笔记。

    总之,《JAVA与模式》读书笔记提供了一个学习和应用设计模式的宝贵资源,对于Java开发者来说,理解和掌握这些模式不仅能够提升编程技能,也能使他们能够设计出更高效、更易于维护的软件系统。通过不断的实践和探索,...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    Head First 设计模式学习笔记(十四)模式的组合使用

    在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    设计模式 笔记(附带代码)

    在软件开发领域,设计模式是经过验证的解决常见问题的有效方案。这些模式是经验丰富的开发者在面对特定设计问题时的智慧结晶,它们提供了一种...通过学习和应用这些设计模式,开发者可以提升自己的编程技巧和设计能力。

    台湾人写的设计模式笔记

    通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...

    设计模式总结-java与模式清晰版

    如果文件中包含Java代码示例,那么对于学习和实践设计模式将非常有帮助。 总的来说,这篇关于“设计模式总结”的资料旨在帮助Java开发者提升对设计模式的理解和应用能力,通过源码分析和实例讲解,使他们能够在实际...

    java语言反射与动态代理学习笔记

    **4.1 JDK动态代理**:基于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。`Proxy.newProxyInstance()`方法用于创建代理对象,而`InvocationHandler`则定义了代理对象的行为。 **...

    设计模式笔记设计模式笔记

    - 在Java集合框架中,大量使用了设计模式,例如List接口使用了迭代器模式,AbstractList使用了模板方法模式。 - Spring框架中,依赖注入(DI)和控制反转(IoC)就是基于工厂模式和代理模式实现的。 - 在多线程...

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

    动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。Spring框架广泛利用了动态代理来实现依赖注入、AOP(面向切面编程)等核心功能。 首先,我们...

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

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

Global site tag (gtag.js) - Google Analytics