- 浏览: 80461 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hanlingbo2008:
问题:
空中巴士(airbus)、波音(Boeing)、麦道 ...
桥梁(Bridge)模式 -
hanlingbo2008:
从Enueration到Iterator的适配
publ ...
适配器模式(Adapter) -
hanlingbo2008:
从Iterator到Enueration的适配
publ ...
适配器模式(Adapter)
8. 代理模式(Proxy)
- 抽象主题角色(abstract role): 声明真实主题和代理主题的共同接口。
- 代理主题角色(Proxy role ): 包含真实主题的引用;创建真实引用;在调用真实主题之前和之后,执行某个真实对象没有侧操作。
- 真实主题角色(true role): 被代理的对象。
代理模式例子
public interface SaleComputer { //抽象主题角色,一个接口 public void sale(String type); }
/** * 真实主题角色 */ public class ComputerMaker implements SaleComputer { public void sale(String type) { System.out.println("卖出了一台"+type+"电脑"); } }
import java.lang.reflect.Proxy; public class ComputerProxy { public static SaleComputer getComputerMaker(){ ProxyFunction pf=new ProxyFunction(); return (SaleComputer)Proxy.newProxyInstance(ComputerMaker.class.getClassLoader(), ComputerMaker.class.getInterfaces(), pf); } }
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ProxyFunction implements InvocationHandler { private ComputerMaker cm; public void youHui(){ System.out.println("我给你一些优惠。。。"); } public void giveMouse(){ System.out.println("我还要送你一个鼠标。。。 "); } public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { String type=(String)arg2[0]; if(type.equals("联想")||type.equals("三星")){ if(cm==null){ cm=new ComputerMaker(); youHui(); giveMouse(); arg1.invoke(cm, type); } }else{ System.out.println("我没有你要的这个牌子的电脑。。。。"); } return null; } }
public class Test { public static void main(String[] args) { SaleComputer sc=ComputerProxy.getComputerMaker(); sc.sale("联想"); sc.sale("三星"); sc.sale("Dell"); } }
java2.0动态代理
- 定义和被代理对象一样的接口
- 调用处理器对象(Invocation Handler)
- 生成代理对象
- 调用处理器invoke()方法,一方面调用真实对象,另一方面执行各种需要的操作
jdk动态代理例子, 来自bjsxt
public interface UserManager { public void addUser(String username,String password); public void deleteUser(int id); public void modifyUser(int id,String username,String password); public String findUserById(int id); }
public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { System.out.println("---------addUser----------"); } public void deleteUser(int id) { System.out.println("---------deleteUser----------"); } public String findUserById(int id) { System.out.println("---------findUserById----------"); return null; } public void modifyUser(int id, String username, String password) { System.out.println("---------modifyUser----------"); } }
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class SecurityHandler implements InvocationHandler{ private Object targetObject; public Object newProxy(Object targetObject){ this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { chechSecurity(); Object result = null; try{ result = method.invoke(this.targetObject, args); }catch(Exception e){ e.printStackTrace(); throw new RuntimeException(e); } return result; } private void chechSecurity(){ System.out.println("---------chechSecurity----------"); } }
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Client { public static void main(String[] args){ SecurityHandler handler = new SecurityHandle(); UserManager um = (UserManager) handler.newProxy(new UserManagerImpl()); um.addUser("ads", "132"); } }
发表评论
-
java.io包学习1
2008-11-27 10:23 1189转自:http://www.blogjava.net/cher ... -
java.io包学习
2008-11-27 10:22 12901. java.io 包中定义了多个流类型来实现输入和输出功 ... -
15、装饰模式(Decorator)
2008-11-25 11:57 727装饰模式(Decorator)使用原来被装饰的类的一个子类的实 ... -
14.1、安全合成模式和透明合成模式
2008-11-25 11:33 839安全合成模式代码: public interface Comp ... -
14. 合成模式(composite)
2008-11-25 11:27 1091合成模式(composite)把部分和整体的关系用树结构表示出 ... -
java八种基本类型
2008-11-24 11:55 5789Java语言提供了八种基本类型。六种数字类型(四个整数型,两个 ... -
命令模式(Command)例子2增加宏命令
2008-11-23 12:00 1220命令模式(Command)例子2增加宏命令 为julia的 ... -
命令(Command)模式例子2
2008-11-23 11:47 991命令(Command)模式例子2 -------- Audio ... -
java内的命令(Command)模式例子
2008-11-23 11:17 1555命令模式例子------创世纪系统 系统开始时,世界是个黑 ... -
命令(Command)模式
2008-11-23 10:59 95413、命令(Command)模式 命令模式( ... -
JDOM对xml文件的读写API
2008-11-18 11:05 1455根据jdom自带的例子总结 1. org.jdom.in ... -
JDOM对xml文件的读写
2008-11-18 10:19 20731. 读取例子 xml文件代码 <?xml ve ... -
java语言对观察者模式的支持
2008-11-17 17:32 82812.1 java语言对观察者模式的支持 ... -
Java Reflection API 简介
2008-11-16 12:40 1460在JDK中,主要由以下类来实现Java反射机制,这些类都位于j ... -
Java 语言的反射机制
2008-11-16 12:22 683在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属 ... -
模板方法模式中的方法
2008-11-15 22:50 74811.2 、模板方法模式中的方法 基本方法: 抽象方 ... -
模板方法模式的一个例子
2008-11-15 22:34 112711.1 模板方法例子 考虑一个银行存款例子 ... -
模板(Template Method)方法模式
2008-11-15 22:11 91711、模板(Template Method)方法模式 ... -
不变(Immutable)模式
2008-11-15 21:44 80910、不变(Immutable)模式 定义: ... -
桥梁(Bridge)模式
2008-11-15 13:01 10389、桥梁(Bridge)模式 桥梁模式的结构 ...
相关推荐
全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...
为其他对象提供一个代理以控制对这个对象的访问。
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
代码仅供参考学习 。
NULL 博文链接:https://wy649898543.iteye.com/blog/1431997
java 代理模式demo ,主要就是对代理模式的一种实现过程,用于刚接触代理模式的人使用,里面介绍了两种代理模式,一种是静态代理,另一种是动态代理的实现Demo
设计模式C++学习之代理模式(Proxy)
2、代理模式(Proxy) 用意:为其它对象提供一种代理以控制对这个对象的访问
C#写的一份包含代理模式Proxy的基本实现代码和一个应用案例代码,有助于Proxy的理解和学以致用。
Android设计模式之代理模式(Proxy Pattern)
代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A...
2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器...
代理模式java代码 Proxy(4) 开发宝典......
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是...Strategy:java.util.Comparator就用到了它 代理模式 Proxy:学习Spring IoC容器必须掌握的模式 <br>
JAVA Proxy 代理模式
Proxy代理模式的经典实例(很有面向对象思想哦)。快速学会Proxy代理模式.
代理模式java代码 Proxy(1) java 学习必备......
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Proxy Pattern 代理模式 采用JAVA实现,可以下载看看。
代理模式是一种设计模式,其定义是为其他对象提供一种代理以控制对这个对象的访问。 代理模式的核心在于提供一个代理来控制和限制对另一个对象的直接访问。这种模式通常用于以下几种情况: 远程代理:当对象位于...