定义
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
UML
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(最简单的比如打印日志)
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
实例
代理商,本身不生成产品,但是从厂家拿产品卖个用户。起到媒介作用。
java的代理模式
简单demo:
/** * 抽象主题,定义主要功能 */ publicinterface Subject { publicvoid operate(); } /** * 具体主题 */ publicclass RealSubject implements Subject{ @Override publicvoid operate() { System.out.println("realsubject operatestarted......"); } } /** * 代理类 */ publicclass Proxy implements Subject{ private Subject subject; public Proxy(Subject subject) { this.subject = subject; } @Override publicvoid operate() { System.out.println("before operate......"); subject.operate(); System.out.println("after operate......"); } } public class Client { publicstaticvoid main(String[] args) { Subject subject = new RealSubject(); Proxy proxy = new Proxy(subject); proxy.operate(); } }
动态代理
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.lang.reflect.Method; //抽象角色:java动态代理的实现目前只支持接口,不支持抽象类 interface BusinessFoo { void foo(); } interface BusinessBar { String bar(String message); } //真实角色:真正实现业务逻辑方法 class BusinessFooImpl implements BusinessFoo { public void foo() { System.out.println("BusinessFooImpl.foo()"); } } class BusinessBarImpl implements BusinessBar { public String bar(String message) { System.out.println("BusinessBarImpl.bar()"); return message; } } //动态角色:动态生成代理类 class BusinessImplProxy implements InvocationHandler { private Object obj; BusinessImplProxy() { } BusinessImplProxy(Object obj) { this.obj = obj; } public Object invoke(Object proxy,Method method,Object[] args) throws Throwable { Object result = null; doBefore(); result = method.invoke(obj,args); doAfter(); return result; } public void doBefore(){ System.out.println("do something before Business Logic"); } public void doAfter(){ System.out.println("do something after Business Logic"); } public static Object factory(Object obj) { Class cls = obj.getClass(); return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new BusinessImplProxy(obj)); } } //测试类 public class DynamicProxy { public static void main(String[] args) throws Throwable { BusinessFooImpl bfoo = new BusinessFooImpl(); BusinessFoo bf = (BusinessFoo)BusinessImplProxy.factory(bfoo); bf.foo(); System.out.println(); BusinessBarImpl bbar = new BusinessBarImpl(); BusinessBar bb = (BusinessBar)BusinessImplProxy.factory(bbar); String message = bb.bar("Hello,World"); System.out.println(message); } }
优点
(1).职责清晰真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
(3).高扩展性
比较
代理模式与外观模式的区别:
1、外观模式也是屏蔽复杂性的,但是外观模式不会实现客户端调用的目标类型接口。
2、一般客户端调用外观模式的方法都是直接调用。
3、代理模式中对客户端目标对象类型抽象接口具体化了。
4、外观模式是代理模式中一种特殊的子级模式(广泛的,非约束性)。
代理模式与适配器模式区别
适配器为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,
因此,它的接口实际上可能只是实体接口的一个子集。
代理模式与装饰器模式区别
尽管装饰器的实现部分与代理相似,但装饰器的目的不一样。装饰器为对象添加一个或多个功能,而代理则控制对对象的访问。
相关推荐
JAVA-设计模式-结构型模式-代理模式
c++设计模式-结构型模式-代理模式,qt工程,c++源码,简单示例
Java 设计模式3-结构型-适配器、组合、代理、外观
设计模式_结构型_代理模式
2、代理模式(Proxy) 用意:为其它对象提供一种代理以控制对这个对象的访问
设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...
适配器模式是将一个类的接口转换成另一个接口,确保接口不兼容的类可以一起工作的结构型模式。 代理在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理...
结构型模式:外观、代理、适配器、桥接等模式,有案例和图解说明,有助于理解
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式)
C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源... 这是第13节:结构型模式Proxy代理模式
结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight ...
资源中包括7个实验的源代码和报告。源代码可运行,报告中包括实现类图。结构型设计模式:适配器模式 代理模式 桥接模式 装饰模式 组合模式 外观模式 享元模式
本课程重点介绍了七种结构型模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式);...结构型模式(代理模式、桥接模式、适配器模式、外观模式、享元模式、装饰器模式、组合模式)
作业1(工厂模式) .doc 作业2(建造者及适配器模式) .docx ...part8-结构型设计模式-代理模式.pptx part9-结构型设计模式-外观模式.pptx part1O-补充内容-XML文件的操作.pptx part10-结构型设计模式-桥接模式.pptx
4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter与Bridge 144 4.8.2 Composite、Decorator与Proxy 145 第5章 行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...