设计模式之 代理模式(demo)
来源:互联网 发布:linux more 向前翻页 编辑:程序博客网 时间:2024/05/16 12:59
代理模式的原理(静态/动态)
代理实现:
1.静态代理: 带理者只能实现一种被代理的需求 2.动态代理: <1>可以实现针对被代理需求的多种代理 <2>需要实现 InvocationHandler接口 <3>利用反射传入的类加载器 来改变代理方法 动态传入代理加载类
一、静态代理模式
//如下实现对静态代理的测试
public class TestProxy { `@Test public void testStaticProxy() { ProxyImpl im = new ProxyImpl(); Proxy2 p2=new Proxy2(); PersonProxy pp = new PersonProxy(p2); pp.action(); }}
//代理和被代理都实现的共同接口如下:
interface Person{ void action(); }
//代理者类实现如下:
class PersonProxy implements Person{ Person p; public PersonProxy(Person p){ this.p=p;//将 顾客(被代理人)的资料告诉代理人 } @Override public void action() { System.out.println("开始代理工作"); p.action();//执行 顾客要求的代理工作 System.out.println("结束代理工作"); }}
//被代理者1——买车实现如下:
class ProxyImpl implements Person{ @Override public void action() { System.out.println("我要买" +"车"); }}
//被代理类2代理买房实现如下:
class Proxy2 implements Person{@Overridepublic void action() { System.out.println("我要买房……"); }}
二、动态代理实现如下:
测试代理方法:
//测试代理运行 模块如下:
`@Testpublic void testDynamicProxy() { Person person = new Customer1(); /** * 参数1: 代理人对象使用的类加载器 参数2:代理人对象 实现的接口 参数3: 被代理人对象 * * */ Person p = (Person) Proxy.newProxyInstance(person.getClass() .getClassLoader(), person.getClass().getInterfaces(), new Clerk(person)); p.doWork();}}
// 包含所有代理类的工厂(类似于中介可代理多种买车 买房 ……)
class Clerk implements InvocationHandler {Person person;// 被代理人public Clerk(Person person) { this.person = person;}/** * 参数1:被代理对象 参数 2:被代理对象要代理的业务——买房或买车 参数 3:被代理对象要执行的方法的对应参数 * * 返回:代理人对象 */@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("-----开始代理工作------"); Object invoke = method.invoke(person, args); System.out.println("-----结束代理工作-------"); return invoke; }}
//共同实现的接口
interface Person {void doWork();}
//被代理对象1
class Customer1 implements Person {@Overridepublic void doWork() { System.out.println("我要买车"); }}
//被代理对象2
class Customer implements Person {@Overridepublic void doWork() { System.out.println("我要买房"); }}
0 0
- 设计模式之 代理模式(demo)
- 设计模式之代理模式学习demo
- 代理设计模式Demo
- iOS_代理设计模式demo
- 设计模式之 工厂模式(demo)
- 设计模式之代理模式(Proxy)
- 设计模式之代理模式(Proxy)
- 设计模式之Proxy(代理模式)
- 【设计模式】之代理模式(Proxy)
- 设计模式之代理(proxy)模式
- 设计模式之代理模式(待续)
- 设计模式之(Proxy)代理模式
- 设计模式之代理模式(C++)
- 设计模式之代理模式(Proxy)
- 设计模式之代理模式(Proxy)
- 设计模式之代理模式(Proxy)
- 设计模式之代理模式(java)
- 读书笔记之设计模式(代理模式)
- 新手开发Hibernate时遇到的错误集锦
- 多个ssh key的使用问题
- 为什么Android要采用Binder作为IPC机制?
- pyschools—Search String
- Python类:授权
- 设计模式之 代理模式(demo)
- poj1185炮兵阵地【状压dp】
- 命名集 —— 绰号昵称篇
- Ubuntu14.04.4升级硬件实现堆栈(HWE)到14.04.5(Xenial Kernel-v4.4)
- 米勒拉宾大素数生成算法
- 十大Intellij IDEA快捷键
- 制作证件照排版软件
- 多线程学习总结(七)——线程安全之共享变量
- XML