C 基本建筑设计

C++ basic architectural design

本文关键字:建筑设计      更新时间:2023-10-16

我不确定正确的决定,所以我问社区:

所以问题是:通过类型或通过属性建模属性还是第三种方式?

可以说我们有两个球 - 红色和蓝色,我必须对它们做些事情。所以第一个想法是:

    struct Ball
    {
        RGB color;
    };
    void food( Ball& ball)
    {
        if ball.color == RED ....
        if ball.color == BLUE ....
    }

我想你明白了。但是我想摆脱if(..(,所以我可以将其更改为

    struct Ball
    { 
        virtual RGB color() = 0;
    }
    struct RedBall : public Ball
    {
        RGB color() { return( RED); }
    };
    struct BlueBall : public Ball
    {
        RGB color() { return( BLUE); }
    };
    void foo( RedBall&) ...
    void foo( BlueBall&) ....

我不确定这是通过创建新类型(通过继承或使用装饰者(来描绘程序流和行为的正确方法,因为这可能会迅速导致巨大的类层次结构。

如果我考虑将这些类型与访客图案一起使用,尤其是用于装饰类型的情况,情况就变得更糟了。我在这里想念什么?

具有多个foo的版本,该颜色的Ball的不同颜色似乎是完全错误的。我会争辩说,如果您想这样做,则可能需要Ball中的成员函数,该函数对foo对球的不同颜色进行不同的作用。

您可以选择将其作为虚拟函数实现,并已派生类来表示每种颜色,或者具有现在在Ball类内部内部的if statements,因此对他人来说"隐藏"。

具有对象取向的想法是要拥有"做事"的对象,而不仅仅是属性的持有者(在这种情况下为颜色(,因此解决此问题的"最正确"方法是让类本身知道什么对象那种应该做。