在对象之间共享数据,绑定属性

时间:2014-02-13 13:53:35

标签: oop

我对对象数据共享有一些想法。

  • 让我们使用属性 p1 p2 定义Class C (让我们认为它是不可变的)。
  • 让我们有一些 X Y 的类 C
  • 让我们为C类对象创建某种“容器” G 。 “容器” G 具有属性 gp1
  • 允许将对象X添加到“容器” G ,并使用 G.gp1 值“绑定” X.p1 。 (绑定确实说当对象 X 试图获取属性 p1 的值时,它获得 gp1 的值。)
  • 让我们将对象Y添加到容器 G ,并使用 G.gp1 值“绑定” Y.p1

你可能认为这对人类来说很简单。

我想到的唯一想法是为 p1,p2 属性访问创建界面。然后在 Class C (无共享数据)和 Class GC (带容器数据)中实现接口。然后装饰对象以添加方法。

正如您所看到的,每个绑定都添加了一个接口+接口实现。这很难写,有点难看。

问题: 如何为每个对象创建这种绑定操作? (没有实现DSL,使用C派生语言:java,C#,C ++,php,...)

1 个答案:

答案 0 :(得分:0)

问题出在哪里?什么是p2?

static class G{
    int gp1;
}
static class C{
    int p1,p2;
    G provider; 
    C(G provider){
        provider=this.provider;
    }
    int getP1(){
        return provider.gp1; 
    }
}
static class X extends C{
    X(G provider){
        super(provider);
    }
}
static class Y extends C{
    Y(G provider){
        super(provider);
    }
}

只有当我们通过其界面提供提供者时,才可以通用。但你不想使用它。这里没有接口的通用解决方案。

interface IProvider{
    int getGp1();
}
static class G implements IProvider{
    private int gp1;
    int getGp1(){return gp1};
}
static class C{
    int p1,p2;
    IProvider provider; 
    C(IProvider provider){
        provider=this.provider;
    }
    int getP1(){
        return provider.gp1; 
    }
}
static class X extends C{
    X(G provider){
        super(provider);
    }
}
static class Y extends C{
    Y(G provider){
        super(provider);
    }
}

请注意,在课堂上有一个字段并且通过getter返回另一个字段中的另一个字段是非常不直观和危险的构造