会员访问设计(访问会员)

时间:2012-03-21 04:13:28

标签: c++ oop design-patterns

我想知道是否有人的设计可以帮助我从GUI界面编辑嵌套对象。

假设我有两个班级

class ObjectA
{
    public:
       ObjectA()
       ~ObjectA()

       unsigned GetParam();
       void SetParam(unsigned Param)

    private:
      unsigned Param;
};

class ObjectB
{
    public:
       ObjectB()
       ~ObjectB()

       ObjectA GetObjectA();
       void SetObjectA(ObjectA ObjA)

    private:
      ObjectA ObjA;
};

现在假设我可以访问ObjectB,但我真的需要从GUI设置Param。我可以通过两种方式来做到这一点。

  1. 使用访问器和更改器来编辑对象

    ObjectA ObjA = ObjB.GetObjectA();
    ObjA.SetParam(100);
    ObjB.SetObjectA(ObjA);
    
  2. 向ObjectB添加公共接口

    void ObjectB::SetParam(unsigned Param)
    {
        ObjA.SetParam(Param);
    }
    
  3. 我真的不喜欢这些解决方案,因为它们涉及很多代码编写访问对象参数并且不能很好地扩展。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我的建议是将objA作为指针而不是对象本身,因为它会更容易避免处理复制构造函数,而且如果ObjectA中有更多的函数,那么你可能需要在类ObjectB中具有相同的函数,例如:像SetParam一样,你可能需要实现GetParam ..

这些功能是各个类的责任,而不是容器类的责任。

class ObjectA
{
    public:
       ObjectA()
       ~ObjectA()

       unsigned GetParam();
       void SetParam(unsigned Param)

    private:
      unsigned Param;
};

class ObjectB
{
    public:
       ObjectB()
       ~ObjectB()

       ObjectA* GetObjectA();
       void SetObjectA(ObjectA *ObjA)

    private:
      ObjectA *ObjA;
};



ObjectA *ObjA = ObjB.GetObjectA();
ObjA->SetParam(100);