- 浏览: 250899 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
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 设计模式学习笔记十六 chain of responsibility 职责链设计模式
2012-11-09 00:15 723chain of responsibility 职责链设计模式 ... -
java 设计模式学习笔记十五 strategy 策略设计模式
2012-11-02 21:22 679strategy 策略设计模式 定义一系列算法,把这些算 ... -
java 设计模式学习笔记一 singleton单例
2012-09-08 18:47 636保证在java程序中,一个class类只有一个实例存在 节省 ... -
java 设计模式学习笔记二 工厂模式Factory
2012-09-28 18:03 657工厂模式:factory 工厂模式就相当于创建实例对象的ne ... -
java 设计模式学习笔记三 Builder模式
2012-09-30 23:25 670设计模式 builder 将一个复杂的对象构建与他的表示分离 ... -
java 设计模式学习笔记四 prototype模式
2012-10-01 21:56 619prototype原型模式 用原型实例指定创建对象种类, ... -
java 设计模式学习笔记五Adapter适配器模式
2012-10-02 23:09 620adapter适配器模式 将两个不兼容的类纠合在一起,属于结 ... -
java 设计模式学习笔记七 facade外观模式
2012-10-04 22:44 613facade外观设计模式 为子系统中的一组接口提供一个统一的 ... -
java 设计模式学习笔记八 composite组合模式
2012-10-05 21:38 718composite组合模式 将对象以树形式组织起来和chai ... -
java 设计模式学习笔记九 decorator装饰模式
2012-10-08 23:39 723decorator装饰模式 动态的给一个对象添加一些额外 ... -
java 设计模式学习笔记十 bridge桥模式
2012-10-18 22:04 764bridge桥模式 将抽象和行为划分开来,各自独立但能动态结 ... -
java 设计模式学习笔记十一flyweight享元设计模式
2012-10-19 21:37 597flyweight享元设计模式 避免拥有相同内容的小类的开销 ... -
java 设计模式学习笔记十二 command命令设计模式
2012-10-20 22:06 599command命令设计模式 类似于callback的功能,就 ... -
java 设计模式学习笔记十三 observer设计者模式
2012-10-21 21:59 761observer设计者模式 示例代码如下: /** ... -
java 设计模式学习笔记十四 template模版模式
2012-10-25 21:54 581/** * 模版 * * @time 下午09:58:0 ...
相关推荐
设计模式C++学习之代理模式(Proxy)
设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制...
详解设计模式中的proxy代理模式及在Java程序中的实现共14页.pdf.zip
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...
《java设计模式(第2版)》适合各个层次的java开发人员与设计人员阅读,也可以作为学习java与设计模式的参考读物或教材。 目录: 第1章 绪论 1 第2章 接口型模式介绍 8 第3章 适配器(adapter)模式 13 第4章 外观(facade...
代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...
代理模式又叫Proxy模式(英文)。所谓的代理,就是一个人或者一个机构代替另一个人或者另一个机构去做一些事情。(类似于中介或者代理商)。
代理模式java代码 Proxy(4) 开发宝典......
java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...
代理模式java代码 Proxy(1) java 学习必备......
C++设计模式课件15_Proxy_代理模式.pdf
java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar /** * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法...
为其他对象提供一个代理以控制对这个对象的访问。
代码仅供参考学习 。
Android设计模式之代理模式(Proxy Pattern)
Proxy ( 代理模式 ) Chain of Responsibility ( 责任链模式 ) Command ( 命令模式 ) Interpreter ( 解释器模式 ) Iterator ( 迭代器模式 ) Mediator ( 中介者模式 ) Memento ( 备忘录模式 ) Observer ( 观察...
java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码
里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些代码对于初学者看起来稍微复杂一些,我...
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...