- 浏览: 958898 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
(8).代理模式:
文章链接:http://www.iteye.com/topic/517835
代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用.
代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,
都是通过代理来完成他的销售业务的.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,
具体红酒工厂在那里,客户不用关心,代理会帮他处理.
代理模式涉及的角色:
1:抽象主题角色.声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替.
2:代理主题角色.含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,
使它可以随时代替真实主题.代理主题通过持有真实主题的引用,
不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作.
3:真实代理对象.定义了代理角色所代表的具体对象.
java主要是通过Proxy类和InvocationHandler接口来给实现对代理模式的支持的.
,拦截机制是代理模式的重要使用方式之一,
除了拦截,代理模式还常用于资源加载,当我们要加载的资源很大时,我们可以让真实主题角色在后台加载资源,让代理主题角色负责处理前台的等待提示信息.
还有就是授权机制,通过代理能拦截真实主题的能力,来控制真实主题的访问权限.
讲到代理常常要讲到动态代理,
如果代理是静态的,那么看起来和装饰器无二,所以代理常常都和动态以及反射联系在一起,总是和语言本身的能力有关……
代理模式通常是对原有对象的控制,不会增加新的行为,比如说原来干什么还是干什么,常见的比如cglib加上事务机制,但是没有增加新的行为,原有的服务未变。
但是装饰模式通常会加上新的行为,而且行为可以动态进行组合,可以有任意顺序,比如给墙刷颜色,先刷底色,再刷红色,再刷绿色,也可以先刷底色,
再刷绿色,再刷红色。
代理模式和装饰模式都可以构造成在新类中引用对原有类,构成原有类的委托,这样就可以对原有类进行控制了,可以加新的行为,也可以加上其他控制。
不过有一点疑问,代理者和被代理者是聚合关系吗??聚合关系是整体和局部的关系,但是离开整体局部还可以生存,比如飞机场和飞机,
代理模式两者关系,我觉得应该是依赖关系,更像是user-a关系,正因为是依赖关系,所以我们使用接口进行了解耦,而不是显示依赖直接注入实现类
package com.createtype.desginpatterns.dynaicproxyaopimp; //接着,用代理模式实现一个超级简单的aop拦截机制 //这个例子可以拦截我们指定的函数,并在拦截前后根据需要进行处理 /** *切面接口,通过实现这个接口,我们可以对指定函数在调用前后进行处理 */ public interface AopInterface { public void before(Object obj);//调用的处理 public void end(Object obj);//调用后的处理 } package com.createtype.desginpatterns.dynaicproxyaopimp; //这个是实现了AopInterface 接口,在这里我们实现了我们的处理逻辑 public class AopInterfaceImp implements AopInterface{ public void before(Object obj) { System.out.println("调用前拦截"); } public void end(Object obj) { System.out.println("调用调用后处理"); } } package com.createtype.desginpatterns.dynaicproxyaopimp; public class ImpObject implements SubInterface{ public void add(String value1,String value2) { System.out.println("ImpObject add(String value1,String value2)"); } public void acc(String value1){ System.out.println("ImpObject acc(String value1)"); } } package com.createtype.desginpatterns.dynaicproxyaopimp; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class PeoxyObject implements InvocationHandler { private AopInterface aop;// 定义了切入时调用的方法 private Object proxy_obj; private String methodName;// 指定要切入的方法名 PeoxyObject() { } public Object factory(Object obj) { proxy_obj = obj; Class cls = obj.getClass(); return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (this.aop == null) throw new NullPointerException("aop is null"); if (method == null) throw new NullPointerException("method is null"); Object o; // 如果指定了要拦截方法名,并且调用的方法和指定的方法名相同,则进行拦截处理 // 否则当正常方法处理 if (methodName != null && method.toString().indexOf(methodName) != -1) { aop.before(proxy_obj);// 指定方法调用前的处理 o = method.invoke(proxy_obj, args); aop.end(proxy_obj);// 指定方法调用后的处理 } else { // 没有指定的方法,以正常方法调用 o = method.invoke(proxy_obj, args); } return o; } public AopInterface getAop() { return aop; } public void setAop(AopInterface aop) { this.aop = aop; } public String getMethodName() { return methodName; } public void setMethodName(String methodName) { this.methodName = methodName; } } package com.createtype.desginpatterns.dynaicproxyaopimp; //这里定义一个用来测试用的类 public interface SubInterface { public void add(String value1,String value2); public void acc(String value1); } package com.createtype.desginpatterns.dynaicproxyaopimp; public class Test { // 这里是测试代码 public static void main(String agr[]) { PeoxyObject po = new PeoxyObject(); po.setAop(new AopInterfaceImp());// 我们实现的拦截处理对象 po.setMethodName("acc");// 指定要拦截的函数 SubInterface si = (SubInterface) po.factory(new ImpObject()); // 因为add方法不是我们指定的拦截函数,AopInterfaceImp是不会被执行 si.add("tt", "dd"); // acc是我们指定的拦截方法,所以调用acc的前后会先执行AopInterfaceImp // 对象的两个方法 si.acc("tt"); } }
发表评论
-
关于Java 23种设计模式的有趣见解
2013-08-10 18:01 1017关于Java 23种设计模式的有趣见解 [来源] 51CT ... -
Java中常用的设计模式(转)
2013-01-30 12:30 1116下面是我对一些常用设计模式的理解: 模式分为:行为模 ... -
工厂模式,抽象工厂模式,简单工厂的区别
2012-10-10 21:35 9541.抽象工厂模式与工厂方法模式的最大区别就在于,工 ... -
java设计模式之常用设计模式分析
2012-06-05 09:09 1276常用的设计模式有:工厂模式(工厂方法模式,简单工厂模式, ... -
java设计模式之责任链模式(行为模式 )
2012-06-04 14:31 1111(11).责任链模式: 文章链接:http:// ... -
java设计模式之观察着模式(行为模式)
2012-06-04 14:28 990(10).观察着模式Observer 文章链接:ht ... -
java设计模式之适配器模式(结构型模式)
2012-06-04 14:26 670(9).适配器模式 文章链接:http://chjl2 ... -
java设计模式之代理模式(结构型模式)
2012-06-04 14:22 1053(8).代理模式: ... -
java设计模式之——装饰模式结(构型模式)
2012-06-03 19:34 1003三.例子代码:使用装饰 ... -
java设计模式之缺省适配器模式(构型模式)
2012-06-03 19:31 1384缺省适配器模式:文章链接:http://jzinfo.itey ... -
java设计模式之模板方法模式(行为模式 )
2012-06-03 19:03 1127package com.createtype.desginpa ... -
java设计模式之——组合模式(结构型模式 )
2012-06-03 18:24 1346接口的作用是什么?定 ... -
java设计模式之——策略模式(行为模式 )
2012-06-03 16:54 1065文章链接:http://yangguangfu ... -
java设计模式之简单工厂模式(创建型模式)
2012-06-01 00:01 1261/** * ## 具体产品(Con ... -
工厂模式,简单工厂模式,抽象工厂模式三者有什么区别
2012-05-31 23:59 1296文章链接: http://blog.csdn.net/ ... -
java设计模式之抽象工厂模式(创建型模式)
2012-05-31 23:57 1141package com.createtype.desgi ... -
java设计模式之工厂方法模式(创建型模式)
2012-05-31 23:56 953package com.createtype.desg ... -
java设计模式之单例模式(创建型模式)
2012-05-30 17:48 1063单列模式: 优点 ... -
java中设计模式分类
2012-05-01 18:31 1146常用的设计模式有:工厂模式(工厂方法模式,简单工厂模式, ... -
Bridge模式(桥接模式)
2012-04-17 22:19 962文章链接:http://airu.itey ...
相关推荐
该项目是一款基于freeRTOS操作系统和STM32F103x微控制器的手机远程控制浴室温度系统设计源码,共包含1087个文件,包括580个C语言源文件、269个头文件、45个汇编源文件、36个数据文件、36个目标文件、35个编译规则文件、28个包含文件、27个文本文件、6个源文件、3个归档文件。此系统通过手机远程实现对浴室温度的有效控制,适用于智能浴室环境管理。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。