DynamicObject - 代理对象的种类

开箱即用,DynamicProxy提供了多种代理对象,主要分红两个大类:git

基于继承(Inheritance-based)github

基于继承的代理是经过继承一个代理类来实现,代理拦截对类的虚(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接口

相关文章
相关标签/搜索