处理不同组继承变量的设计模式?

问题描述 投票:0回答:1

我有一个基类,用于存储数据库一条记录的所有列。在那个课程中我也有设置和方法。我还有一个名为 Run() 的纯虚拟方法。现在我想要三个子类,使用 Run() 方法将该记录的不同字段发送给不同的接收者。 但是,问题就在这里。子类继承不使用的变量(本例中数据库记录的字段)。 我只想仅使用基类中的公共文件,并将其他文件存储在子类中。那么如何使用基类指针设置子类的成员变量呢? Child1、Child2、Child3 都没有使用所有 field1、field2、..、fieldN。如果将每个子类想要的字段转移到自己的类中,那么我将如何使用父类的 SetFields 在不同的子类中设置不同的字段?

class Interface
{
public:
int field1, field2, field3, ..., fieldN;
void SetFields(field1,field2,field3,fieldN); // --\> gets all the fields as arguments
virtual void Run() = 0;
};

class Chid1: public Interface
{
void Run() {
/// send field1, field2, field3 to recepient1
}
};

class Chid2: public Interface
{
public:
void Run() {
/// send field4, field5, field6 to recepient2
}
};
class Chid3: public Interface
{
public:
void Run() {
/// send field7, field8, fieldN to recepient3
}
};
I

需要可以使用父类设置子成员的设计模式。

c++ inheritance design-patterns polymorphism virtual-functions
1个回答
0
投票

要求

我只想使用基类中的公共字段,并存储 其他人在儿童班。

  1. 类必须存储公共字段。 -> 建议类名
    Common
    而不是
    Interface

Child1、Child2、Child3 类均不使用所有字段(field1、 字段2,...)。

  1. 其他类存储不常见的字段。 -> 建议类名
    Additional<n>
    而不是
    Child<n>

我想要三个子类发送不同的字段 使用 Run() 方法记录到不同的接收者。

  1. 附加类(
    Additional<n>
    )发送专业领域。

设计

如果我正确理解了需求,那么我认为不需要继承、接口类、基类等。

我建议改用聚合。

C++代码

class Common
{
public:
    int mnField1;
    int mnField2;
    ...
    AdditionalA madditionalA;
    AdditionalB madditionalB;
    ...
    void SetFields(int nFieldC1, int nFieldC2, int nFieldA1, int nFieldB1) {
        mnField1 = nFieldC1;
        mnField2 = nFieldC2;
        ...
        madditionalA.mnField1 = nFieldA1;
        madditionalB.mnField1 = nFieldB1;
        ...
    }
    void Run() {
        // send mnField1, mnField2 ...
        madditionalA.Run();
        madditionalB.Run();
    }
};

class AdditionalA
{
public:
    int mnField1;
    ...
    void Run() {
        // send mnField1
    }
};

...

提示

  • “包含”-> 聚合
    • 例如一条记录包含字段。
  • “是”-> 推导
    • 例如账单一份文件。
  • “相关”-> 关联
    • 例如客户地址项目。
© www.soinside.com 2019 - 2024. All rights reserved.