容器类成员交互

时间:2015-04-24 01:12:27

标签: c++ design-patterns

我想就如何改进整体计划设计提出一些建议。

我有一个主要类,它有两个经常需要相互交互的成员。这个类容器类有一个Initialize()函数,用于初始化两个成员,以及其他提供对外界访问的函数:

class Foo {
public:
    bool InitializeAandB();
    void UseFoo();

private:
    TypeA a;
    TypeB b;
};

在调用UseFoo()后的某个时刻,a需要调用b个公共函数之一。所以,让我们说TypeA有一个像这样的成员函数:

void TypeA::Function() {
    if (true) {
        TypeB *bpointer;
        bpointer->Interact(); // Need pointer to b here.
    }
}

TypeATypeB是单独的实体,不能合并为一个类。碰巧这些独立的实体需要在不同的时间彼此交互。

我不想让ab公开,因为它们不应该从外部世界中看到。在TypeA中添加TypeBFoo作为朋友似乎是一个hacky修复。同样不理想,因为当TypeATypeB只需要了解彼此时,FooGetA()需要了解GetB()。公共TypeB*TypeA访问者函数也是如此。

第三个选项是将TypeA*成员添加到TypeB,将InitializeAandB()成员添加到 <div> <telerik:RadToolBar ID="rtlbCustomers" runat="server" Width="100%" Height="18px"> <Items> <telerik:RadToolBarButton runat="server" ImageUrl="~/Images/AddIco.png" Text="Add" Value="btnAdd" /> <telerik:RadToolBarButton runat="server" ImageUrl="~/Images/EditIco.png" Text="Change" Value="btnUpdate" /> <telerik:RadToolBarButton runat="server" ImageUrl="~/Images/DeleteIco.png" Text="Delete" Value="btnDelete" /> </Items> </telerik:RadToolBar> </div> .RadToolBar .rtbItem { height:16px !important; } 期间设置。但这在某种程度上似乎是多余的,比如我错过了更好的整体设计。

有没有更好的方法来设计它?

3 个答案:

答案 0 :(得分:1)

如何将TypeA::Function()作为参数传递给line(反之亦然)?

答案 1 :(得分:1)

依赖注入是我能想到的唯一选择。

答案 2 :(得分:0)

我同意@CreativeMind。你应该在这里使用DI容器。

将初始化阶段重构为单独的类,使用AB的实例填充DI容器。从其实现中提取接口并将其作为契约放在某处。现在他们是服务,可以互相询问容器。

Foo现在可以同样方式使用AB - 通过容器。