代理模式
来源:互联网 发布:中万网络 域名 编辑:程序博客网 时间:2024/06/06 03:21
/** * 代理模式:当用户希望和某个对象打交道时可能不希望直接访问该对象,而是提供一个特殊的对象,作为该访问对象的代理 * * 特点:代理对象与所代理的对象实现了相同的接口,也就是说代理和代理对象向用户公开了相同的方法。当用户请求调用这样的方法时,可能会检查他所代理的对象是否可用。 * * 元素:抽象主题,实际主题,代理 * */
/** * 抽象主题 * */public interface AbstractTheme {//该方法模拟求三角形的面积public abstract void getArea();}
/** * 实际主题 * */public class RealTheme implements AbstractTheme{public void getArea() {System.out.println("实际主题计算三角形面积成功");}}
/** * 代理 * */public class DaiLiTheme implements AbstractTheme{RealTheme realTheme;int i;//作为代理对象是否可用//可能会判断代理对象的是否可用public void getArea() {if (i==0) {realTheme = new RealTheme();//实际主题realTheme.getArea();}else{System.out.println("不是三角形");}}public void setiValue(int i){this.i = i;}}
public class Main {/** * 代理模式:当用户希望和某个对象打交道时可能不希望直接访问该对象,而是提供一个特殊的对象,作为该访问对象的代理 * * 特点:代理对象与所代理的对象实现了相同的接口,也就是说代理和代理对象向用户公开了相同的方法。当用户请求调用这样的方法时,可能会检查他所代理的对象是否可用。 * * 元素:抽象主题,实际主题,代理 * */public static void main(String[] args) {DaiLiTheme daiLiTheme = new DaiLiTheme();daiLiTheme.setiValue(0);daiLiTheme.getArea();}}
//动态代理模式
/** * 抽象角色 * */interface Person {public abstract void phone(String str);}
/** * 具体角色 * */public class Boss implements Person{public void phone(String str) {System.out.println("电话内容:"+ str);}}
/** * 代理角色(当正式角色较多,会造成代理角色臃肿) * * InvocationHandler 可以在运行时动态生成代理类(“代理角色”) * */public class MiShu implements InvocationHandler{private Object obj = null;public MiShu(Object obj){this.obj = obj;}//InvocationHandler的抽象方法,创建MiShu时会执行改方法public Object invoke(Object arg0, Method method, Object[] arg2)throws Throwable {Object result = null;result = method.invoke(this.obj, arg2);return result;}//返回改代理类的实例public static Object factory(Object object){Class objClass = object.getClass();return Proxy.newProxyInstance(objClass.getClassLoader(), objClass.getInterfaces(), new MiShu(object));}}
public class Main {public static void main(String[] args) {Boss boss = new Boss();Person person = (Person)MiShu.factory(boss);person.phone("正在拨打电话151");}}
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- SAS CE - CE4 Model Val
- 关于Dragger2与RXjava集合框架的项目随笔
- CSDN-markdown编辑器
- 如何处理PB级别数据(1)——Elasticsearch与Solr 选型
- iptables
- 代理模式
- SAS CE - CE5 Model Lift
- 开发常用网址
- mysql中授权(grant)和撤销授权(revoke)等命令的用法详解[转]
- DiscuzX3.2禁止登录及注册功能
- 关于nova-network的fixed IP的扩容的初探
- Git基本操作
- 《数据结构》进行曲 之 单链表实现学生信息管理系统
- [memory]C语言关于字节对齐的问题