java 设计模式 学习笔记(6) 代理模式
2011-04-16 14:40
791 查看
代理模式:
为其他对象提供一种代理以提供对这个对象的的访问。
代理模式的应用范围比较广泛:
1.远程代理,为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
2. 虚拟代理, 根据需要创建开销很大的对象,通过虚拟代理来存放实例化需要很长时间的真实对象
3. 安全代理,用来控制真实对象访问时的权限
4. 智能指引,当调用真实的对象时,代理处理另外一些事。
现实生活中,就存在很多的代理例子。最普遍的就属日常生活中的商品购买,工厂大批量的生产商品,但一般都不会将单独出售某件或少数几件给普通顾客,普通人需要生活物质,则需要到超市购买,也就是通过 超市 这个代理来获取到工厂的产品。
下面用程序来实现 代理模式:
1. Factory 类,这个就是 《大话设计模式》中的额 Subject 类,它定义了 produce 方法,表示生产某种产品。
2. MilkFactory 类,对应于《大话设计模式》的RealSubject 类,该类继承Factory ,重写 produce () 方法,并返回一个 String 对象,表示制造了一种产品 - Milk
3. Proxy 类,就是代理类,也继承了Factory 类,保存了一个MilkFactory 类引用,通过在其重写的 produce() 中调用被代理对象 MilkFactory 类的 produce() 方法,来返回一个 String 对象 "milk" 。
这里需要注意的是 , 代理类想要实现代理功能,那么必须和被代理的对象使用相同的接口有共同的父类,
4. 编写测试类,用来验证这个程序的正确性
结果输出 :milk
通过测试类,可以看出,用户代码直接访问了 Proxy 代理类得produce () 方法,得到了 milk 。而事实上,milk 是由MilkFactory 类产生的,这样就得到了代理类的本质 :帮助用户访问其平时不能访问到的对象。
为其他对象提供一种代理以提供对这个对象的的访问。
代理模式的应用范围比较广泛:
1.远程代理,为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
2. 虚拟代理, 根据需要创建开销很大的对象,通过虚拟代理来存放实例化需要很长时间的真实对象
3. 安全代理,用来控制真实对象访问时的权限
4. 智能指引,当调用真实的对象时,代理处理另外一些事。
现实生活中,就存在很多的代理例子。最普遍的就属日常生活中的商品购买,工厂大批量的生产商品,但一般都不会将单独出售某件或少数几件给普通顾客,普通人需要生活物质,则需要到超市购买,也就是通过 超市 这个代理来获取到工厂的产品。
下面用程序来实现 代理模式:
1. Factory 类,这个就是 《大话设计模式》中的额 Subject 类,它定义了 produce 方法,表示生产某种产品。
abstract class Factory { public abstract String produce(); }
2. MilkFactory 类,对应于《大话设计模式》的RealSubject 类,该类继承Factory ,重写 produce () 方法,并返回一个 String 对象,表示制造了一种产品 - Milk
public class MilkFactory extends Factory{ @Override public String produce() { // TODO Auto-generated method stub return "milk"; } }
3. Proxy 类,就是代理类,也继承了Factory 类,保存了一个MilkFactory 类引用,通过在其重写的 produce() 中调用被代理对象 MilkFactory 类的 produce() 方法,来返回一个 String 对象 "milk" 。
这里需要注意的是 , 代理类想要实现代理功能,那么必须和被代理的对象使用相同的接口有共同的父类,
public class Proxy extends Factory{ MilkFactory milkFactory; @Override public String produce() { // TODO Auto-generated method stub if(milkFactory == null){ milkFactory = new MilkFactory(); } return milkFactory.produce(); } }
4. 编写测试类,用来验证这个程序的正确性
public class TestProxyPattern { public static void main(String[] args){ Proxy proxy = new Proxy(); String milk = proxy.produce(); System.out.println(milk); } }
结果输出 :milk
通过测试类,可以看出,用户代码直接访问了 Proxy 代理类得produce () 方法,得到了 milk 。而事实上,milk 是由MilkFactory 类产生的,这样就得到了代理类的本质 :帮助用户访问其平时不能访问到的对象。
相关文章推荐
- Java-马士兵设计模式学习笔记-代理模式-动态代理 调用Proxy.newProxyInstance()
- Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑
- java设计模式学习笔记3 代理模式-静态代理
- java 设计模式学习笔记六 proxy代理模式
- 设计模式学习笔记---代理模式Proxy(Java版)
- 【知了堂学习笔记】_Java中设计模式之代理模式的学习
- Java-马士兵设计模式学习笔记-代理模式--动态代理 修改成可以代理任意接口
- java 设计模式学习笔记六 proxy代理模式
- 【设计模式】学习笔记17:代理模式之保护代理与Java反射
- 【设计模式】学习笔记17:代理模式之保护代理与Java反射
- java学习笔记-设计模式9(代理模式)
- java设计模式学习笔记之代理模式
- 15. JAVA 反射机制 Part 2(动态代理、类的生命周期、工厂设计模式) ----- 学习笔记
- Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较
- 【java学习笔记s】设计模式--静态代理
- Java-马士兵设计模式学习笔记-策略模式-模拟 Comparator接口
- 设计模式学习笔记——代理(Proxy)模式
- Java学习笔记15 单例设计模式(Sin…
- java学习笔记之——设计模式(一)单例设计模式