考虑一个场景(C ++):
基本上,在实现中,A类提供了一种从文件(XML)访问数据的方法。实际上,A类中的方法又调用类B的方法来检索或设置XML中的值。例如,A类具有用于检索标记值的getter函数,在A类级别(主要是验证)执行某些操作之后,A类委托给B类的getter函数。
void GetXMLTagValue (const string& sTagName, string& sTagValue)
问题: 在某种情况下,我只有一个B类实例。我需要调用A类的公共非静态方法。是否有推荐的实现方法?
答案 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的事实,这将是一个更激进的变化设计比添加观察者;我不确定它是您在设计中寻找的东西。