代理模式
来源:互联网 发布:道路照明计算软件 编辑:程序博客网 时间:2024/06/03 17:22
1类图
2定义
为其他对象提供一种代理以控制对这个对象的访问。
3应用场景
1. 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
通用模板
4抽象主题类
public abstract class Subject { public abstract void visit();}
5具体主题类
public class RealSubject extends Subject { @Override public void visit() { System.out.println("Real subject"); }}
6代理类
public class ProxySubject extends Subject { private RealSubject mSubject; public ProxySubject(RealSubject realSubject) { mSubject = realSubject; } @Override public void visit() { mSubject.visit(); }}
7客户类
public class Client { public static void main(String[] args) { RealSubject real = new RealSubject(); ProxySubject proxySubject = new ProxySubject(real); proxySubject.visit(); }}
简单实现
8诉讼接口
public interface ILawsuit { void submit(); void burden(); void defend(); void finish();}
9具体诉讼人
public class Xiaomin implements ILawsuit{ @Override public void submit() { System.out.println("拖欠工资!"); } @Override public void burden() { System.out.println("证据 "); } @Override public void defend() { System.out.println("证据确凿!"); } @Override public void finish() { System.out.println("结束"); }}
10代理律师
public class Lawyer implements ILawsuit{ private ILawsuit mLawsuit; public Lawyer(ILawsuit mLawsuit) { this.mLawsuit = mLawsuit; } @Override public void submit() { mLawsuit.submit(); } @Override public void burden() { mLawsuit.burden(); } @Override public void defend() { mLawsuit.defend(); } @Override public void finish() { mLawsuit.finish(); }}
11客户类
public class Client { public static void main(String[] args) { ILawsuit xiaomin = new Xiaomin(); ILawsuit lawyer = new Lawyer(xiaomin); lawyer.submit(); lawyer.burden(); lawyer.defend(); lawyer.finish(); }}
动态代理
12动态代理类
public class DynamicProxy implements InvocationHandler { private Object obj; public DynamicProxy(Object obj) { this.obj = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = method.invoke(obj, args); return result; }}
13动态代理客户类
public class Client { public static void main(String[] args) { //method1(); ILawsuit xiaomin = new Xiaomin(); DynamicProxy proxy = new DynamicProxy(xiaomin); ClassLoader loader = xiaomin.getClass().getClassLoader(); ILawsuit lawyer = (ILawsuit)Proxy.newProxyInstance(loader,new Class[]{ILawsuit.class}, proxy); lawyer.submit(); lawyer.burden(); lawyer.defend(); lawyer.finish(); }}
阅读全文
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- 机器学习笔记之R语言基础篇1
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'studentDao'
- 职场揭秘:你在职场是被重用还是被利用?
- android动态获取gps信息后本地文件保存问题总结
- 从 Kubernetes 谈容器网络
- 代理模式
- Spring各个jar包作用
- 小菜鸟与后台对接接口下来的感受
- centos6.x 升级gcc到4.9
- 值传递、指针传递、引用传递
- 算法(一)枚举问题
- vi编辑器-1.vi快捷键
- PHP MySQL 预处理语句
- 用Shiro实现简单的身份验证