在给定场景中访问类的公共方法 - C ++

时间:2015-08-23 21:35:30

标签: c++ oop

考虑一个场景(C ++):

  1. A类,B类,均来自同一父类。对于A类的每个实例,只有一个B类实例。
  2. A类保持指向B类的指针,以便在A类的构造函数中创建B类实例。
  3. 基本上,在实现中,A类提供了一种从文件(XML)访问数据的方法。实际上,A类中的方法又调用类B的方法来检索或设置XML中的值。例如,A类具有用于检索标记值的getter函数,在A类级别(主要是验证)执行某些操作之后,A类委托给B类的getter函数。

     void GetXMLTagValue (const string& sTagName, string& sTagValue)
    
  4. 问题: 在某种情况下,我只有一个B类实例。我需要调用A类的公共非静态方法。是否有推荐的实现方法?

1 个答案:

答案 0 :(得分:0)

最简单的方法就是将指针放回A.它很容易因为A构造B.

然而,值得质疑的是这个特殊情景背后的设计意图。

您似乎实现了 proxy design pattern ,其中A是代理(GUI?),B是真正的主题(持久业务对象?)。公共基类是真实对象及其代理的接口。 A将请求转发给B.

原则上,代理的目标是提供代理/占位符来控制对真实对象的访问(Gang of 4)。你的特殊情况有点不同,因为B向A转发了一些东西:

意图是什么?

  • 必须告知B的某些状态变化吗?在这种情况下,我建议使用observer pattern并将A函数视为(虚拟)回调函数。优点是,如果您稍后得出结论,需要通知另一个对象,那么它很容易进化。

  • B承担A没有的责任吗? B应该以更广泛的方式操纵A吗?然后你可以看到B是decorator。它有点像代理。如果你采用装饰器方法,你可以在最终客户端和B之间插入其他中间对象,如B和A之间。但是看到你的一对一关系和A创建B的事实,这将是一个更激进的变化设计比添加观察者;我不确定它是您在设计中寻找的东西。