标签: proxy-pattern

Python中的代理模式

我的代码中实现了很多类.现在我意识到,对于为所有这些类调用的每个方法,我需要添加一行:

with service as object:
Run Code Online (Sandbox Code Playgroud)

所以我试图使用代理模式自动完成工作,这是我的示例代码

class A(object):
    def __init__(self, name):
        self.name = name
    def hello(self):
        print 'hello %s!' % (self.name)
    def __enter__(self):
        print 'Enter the function'
        return self
    def __exit__(self, exc_type, exc_value, traceback):
        print 'Exit the function'
class Proxy(object):
    def __init__(self, object_a):
#        object.__setattr__(self, '_object_a', object_a)
        self._object_a = object_a

    def __getattribute__(self, name):
        service = object.__getattribute__(self, '_object_a')
        with service as service:
            result = getattr(service, name)
        return result    

if __name__=='__main__':
    a1 = A('A1')
    b = Proxy(a1)
    b.hello()
    a2 = A('A2')
    b …
Run Code Online (Sandbox Code Playgroud)

python proxy-pattern

2
推荐指数
1
解决办法
3535
查看次数

对于代理容器上的迭代器,什么是“最差的实现”?

语境

我正在尝试实现类似容器的nD数组。可以包装基础序列容器并允许将其作为(of ...)容器的容器进行处理的东西:arr[i][j][k]应该是的(最终const)引用_arr[(((i * dim2) + j) * dim3) + k]

好的,直到那里,arr[i]只是在子数组上有一个包装类。

当我尝试实施干预者时,我突然意识到周围到处都是龙:

真正的问题是,一旦有了代理容器,任何迭代器都无法满足对转发迭代器的以下要求:

转发迭代器[forward.iterators]
...
6如果ab都是可取消引用的,则a == b仅当*a*b绑定到同一对象时,则。

示例来自标准库本身:

  • vector<bool> 众所周知,它不遵守容器的所有要求,因为它返回代理而不是引用:

    class vector [vector.bool]
    ...
    3不需要将数据存储为bool值的连续分配。建议使用空间优化的位表示形式。
    4 reference是模拟向量中单个位的引用行为的类。

  • 文件系统路径迭代器是隐藏式迭代器:

    path迭代器[fs.path.itr]
    ...
    2 path :: iterator是一个常量迭代器,它满足双向迭代器(27.2.6)的所有要求,但对于可取消引用的迭代器a以及bpath :: iterator类型,a == b …

c++ iterator proxy-pattern

2
推荐指数
1
解决办法
71
查看次数

为什么代理模式这么慢?

至少在java中,代理模式有很多开销 - 我不记得确切的数字,但是当包装微小方法时,代理需要花费50倍于包装方法的时间.这是,例如,为什么java.awt.image.BufferedImage.setRGB&getRGB真的慢; 有大约三个代理包装实际byte[].

为什么50次?!为什么代理不会加倍?


编辑:=(

正如SO似乎常见的那样,我得到了一堆答案,告诉我我的问题是错的.不是.查看BufferedImage或其他一些真正的代理模式,而不是那些微基准测试.事实上,如果你必须对BufferedImage进行大量像素操作并且你知道它的结构,你可以通过手动撤消代理来实现所谓的巨大加速; 看到这个答案.

哦,这是我50倍来源.正如文章详细说明的那样,代理在包装需要很长时间时没有明显的损失,但是如果你用一个小方法包装它们确实会产生很大的痛苦.

java proxy-pattern

1
推荐指数
1
解决办法
725
查看次数

JavaScript代理模式解释

我研究JavaScript代理模式,但我仍然没有,我可以从中受益.因此,我想向您提供两个例子,请您指出它们之间的区别.

请看下面的代码:

  • 这两个addEventListener电话有什么区别?其中一个人handleDrop定期打电话.另一个使用代理模式.
  • 使用代理模式方法可以获得什么?

我测试了两个函数,它们都handleDrop成功调用了.

DndUpload.prototype.buildDropZone = function ()
{
    var self = this,

    this.dropZone.addEventListener('drop', function (e) { self.handleDrop.call(self, e) }, false);
    this.dropZone.addEventListener('drop', self.handleDrop, false);


    DndUpload.prototype.handleDrop = function (e)
    {
        alert("test");
        ...
    };
}
Run Code Online (Sandbox Code Playgroud)

您可以为我提供很好的参考,其中包含JavaScript中代理模式的非常清晰的解释.

提前致谢.

javascript web-applications javascript-events proxy-pattern

1
推荐指数
1
解决办法
599
查看次数