DynamicObject - 代理对象的种类
开箱即用,DynamicProxy提供了多种代理对象,主要分成两个大类:
基于继承(Inheritance-based)
基于继承的代理是通过继承一个代理类来实现,代理拦截对类的虚(virtual)成员的调用并把它们转发到基本实现,在这种情况下,代理和被代理对象是一个,这也就意味着你不能为一个已经存在的对象,创建基于继承的代理.在DynamicProxy里只有一种基于继承的代理.
- 类代理(Class proxy) - 为一个类创建一个基于继承的代理,只有类的虚成员能被拦截.
基于整合(Composition-based)
基于整合代理是一个新的对象,它继承于被代理的类/实现被代理的接口和(随意地)转发对目标对象的调用的拦截.DynamicProxy暴露了如下几种基于整合的代理:
- 有目标的类代理(Class proxy with target) - 这种代理指向类.它不是一个完美的代理,如果类没有非虚成员或公开(public)成员就不能被拦截,它就会给用户提供一个对象的不一致的状态视图,基于这个原因,使用它时一定要小心.
- 无目标的代理接口(Interface proxy without target) - 这种代理指向接口.不需要为它提供目标对象,相反地,该代理需要为拦截器提供所有成员的实现.
- 有目标的代理接口(Interface proxy with target) - 顾名思义,包装指定的接口的对象的实现,转发对这些接口的调用到目标对象.
- 有目标接口的代理接口(Interface proxy with target interface) - 这是一种针对两种不同接口合并的代理,可以(但不是必须)为它提供目标对象,也可以为它在生命周期里交换目标对象.它不是被绑定在某个类型上的目标代理,所以它可以复用在不同的类型上,只要这个类型实现了目标接口.
英文原文:https://github.com/castleproject/Core/blob/master/docs/dynamicproxy-kinds-of-proxy-objects.md