- 浏览: 38809 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
xieyaxiong:
songbin0201 写道整篇文章的精华在那些gif图片上 ...
排序算法 -
songbin0201:
整篇文章的精华在那些gif图片上
排序算法
design pattern——代理模式
- 博客分类:
- design pattern
针对问题: 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式和装饰模式很相似,不同之处在于代理模式是给主题添加控制,但是这些控制来自代理自身的实现,不像装饰模式一样添加的功能来自己主题的子类提供。
装饰模式可以装饰很多次来得到自己想要的实体,类似的代理模式也可以代理很多次,但通常不会这种做,因为这不是代理模式的目的。装饰模式的目的是添加功能,而代理模式的目的是添加控制。
代理模式结构图:
代理模式实现代码:
/** * 抽象主题类 * @author bruce * */ public abstract class Subject { public abstract void request(); } /** * 具体主题类 * @author bruce * */ public class RealSubject extends Subject{ @Override public void request() { // TODO Auto-generated method stub System.out.println("real do something"); } } /** * 代理类 * @author bruce * */ public class Proxy extends Subject{ private Subject subject; public Proxy(Subject subject){ this.subject=subject; } @Override public void request() { // TODO Auto-generated method stub doBefore(); subject.request(); doAfter(); } private void doBefore(){ System.out.println("before doing something"); } private void doAfter(){ System.out.println("after doing something"); } } /** * 测试 * @author bruce * */ public class Client { public static void main(String[] args) { Subject subject=new Proxy(new RealSubject()); subject.request(); /** * output: before doing something real do something after doing something */ } }
动态代理模式:代理模式只能在运行前写好,也就是说是静态的,而动态代理可以在运行时期创建(运用反射)
动态代理模式实现代码:
/** * 抽象主题类 * @author bruce * */ public interface Subject { public void requestA(); public void requestB(); } /** * 具体主题类 * @author bruce * */ public class RealSubject implements Subject{ public void requestA() { // TODO Auto-generated method stub System.out.println("do A"); } public void requestB() { // TODO Auto-generated method stub System.out.println("do B"); } } /** * 代理内容实现 * @author bruce * */ public class SubjectProxy implements InvocationHandler{ private Object object; public SubjectProxy(Object object){ this.subject=subject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object object; if(method.getName().equals("requestA")){ System.out.println("allow to do requestA method"); object=method.invoke(subject, args); return object; }else if(method.getName().equals("requestB")){ System.out.println("not allow to do requestB method"); return null; }else{ System.out.println("other method"); } return null; } } /** * 测试 * @author bruce * */ public class Client { public static void main(String[] args) { RealSubject subject=new RealSubject(); Subject proxy=(Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), new SubjectProxy(subject)); System.out.println("------------"); proxy.requestA(); System.out.println("------------"); proxy.requestB(); /** * output: * ------------ allow to do requestA method do A ------------ not allow to do requestB method */ } }
发表评论
-
design pattern——状态模式
2012-07-25 17:48 675针对问题:有时候一个方法可能有很多if..else来判断 ... -
design pattern——组合模式
2012-07-24 11:16 585针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素 ... -
design pattern——迭代器模式
2012-07-23 17:50 617针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结 ... -
design pattern——模板方法模式
2012-07-23 16:25 674针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以 ... -
design pattern——外观模式
2012-07-20 15:11 587针对问题:在软件开发系统中,客户程序经常会与复杂系统的内部子系 ... -
design pattern——适配器模式
2012-07-20 14:30 653针对问题:将一个类的接口转换成客户希望的另外一个接口。A ... -
design pattern——命令模式
2012-07-19 17:03 735针对问题:在软件系统中,“行为请求者”与“行为实现 ... -
design pattern——单例模式
2012-07-13 17:34 631单例是乎没什么好说的,创建的过程中需要考虑到的是并发安全问题和 ... -
design pattern——抽象工厂模式
2012-07-13 17:31 654针对问题:和工厂方法模式类似,用一个继承体系来实现创建对象的 ... -
design pattern——工厂方法模式
2012-07-13 17:25 630针对问题:当要创建的产品种类很多,并且会随着时间的推移会不断 ... -
design pattern——装饰者模式
2012-07-12 13:40 679针对问题:在两个集合中的对象期望做到任意组合,而这样的组合的可 ... -
design pattern——观察者模式
2012-07-11 17:59 620针对问题:在消息-通知 的程序结构中,为了通知待通知的 ... -
design pattern——策略模式
2012-07-10 15:16 621针对问题:在许多继承体系结构中,经常出现的一些问题是在超 ... -
抽象类还是接口?
2012-07-10 11:29 618从概念上看 抽象类要描述的是一种类型,和普通的实 ...
相关推荐
实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...
DesignPattern 设计模式,共10章。内容详细,案例设计齐全。对设计可复用的面向对象的软件很有帮助,有助你写出又质量,并且可重复使用的高品质软件
DesignPattern 新版設計模式(C#) 講述23種設計模式: ◆結構圖 ◆生活例子 ◆意圖 ◆適用性 ◆示例代碼 ◆實際應用
Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...
代理模式(Proxy) 行为型: 责任链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式...
本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇。
DesignPattern_BasicKnowledge设计模式之类关系:设计模式 类关系 基础 依赖 关联
深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签
Design*Pattern*Framework*4.5
golang design pattern go 设计模式实现,包含 23 -go-design-pattern
Mobile Design Pattern Gallery : UI Patterns for Mobile Applications原版 全彩 120M大容量《移动应用ui设计模式》是一本移动应用ui 设计模式参考书,分10 大类介绍了70 个移动应用设计模式(包括反模式),用400 ...
Theresa Neil's new book "Mobile Design Pattern Gallery" provides solutions to common design challenges. There is inspiration on every topic from designing your application's navigation to choosing ...
DesignPattern(设计模式迷你手册)
chain 设计模式 DesignPattern 供应链模式
golang design pattern; 设计模式golang版本-go-design-patterns
C++ 23种设计模式(全_解释+源代码).zip 23种设计模式都是基于以下原则,务必记牢 依赖倒转原则 里氏代换原则 开闭原则 接口隔离原则 合成聚合复用原则 迪米特法则 23种设计模式如下:
你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求帮助—— 设计模式是过去人们面对同样的软件设计问题所得到的经验。 有了设计模式,就可以利用其他人的实践经验的精华, 因此省下...
JAVA software design pattern
GoF的经典著作设计模式(Design Pattern)