这个设计模式的名称是什么(通过委托向协作者公开私有方法)?

4

在设计模式中,如果一个类通过委托向协作对象公开私有方法或属性,这种模式叫什么名字?这个问题是关于C#的,但对其他编程语言也可能适用。

例如:

class Foo
{
    public int X
    {
        get;
        private set;
    }

    public void UpdateX(Bar bar)
    {
        bar.UpdateX(x => this.X = x);
    }
}

class Bar
{
    public void UpdateX(Action<int> setter)
    {
        setter(7);
    }
}

Foo foo = new Foo();
Bar bar = new Bar();
foo.UpdateX(bar);

我认为这在状态模式中将非常有用,因为它允许状态更新其上下文而无需通过公共接口暴露内容,也不需要将状态类嵌套在上下文类中。

5个回答

1

我在这里没有看到任何模式,但这是一种封装的破坏。

如果你有一个只读属性,那么为什么要试图规避它呢?


我认为这里的想法是在Foo中存储另一个对象的状态。当然,这只是一个人为的例子。 - dreadwail
经过深思熟虑,我倾向于同意这个回复。我想这是一种编码习惯,不符合模式的要求。封装的破坏可能源于客户端代码在 Update 调用返回后仍然保留委托并更改属性的事实。 - Ergwun


0

委托是一种设计模式。


0

这与备忘录模式有惊人的相似之处,备忘录模式确实非常适用于存储和操作状态。

它还具有依赖注入或委托的元素。

也许比我更有经验的人会认识到它的真正名称。

这是有关备忘录模式的一些信息:
Wikipedia:备忘录

以及依赖注入模式:
Wikipedia:依赖注入


0

我会选择200分的双重派发,这样你就可以顺利地使用访问者模式了。

我认为这并不会破坏封装性,因为Foo定义了委托。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接