文章

类之间常见的关系

类之间常见的关系

合理选择类的关系设计能提高代码的扩展性和可维护性。例如,组合优先于继承、依赖注入解耦等设计原则,都基于这些关系的特点。常见的类关系如下表:

关系类型耦合强度生命周期依赖示例场景
继承最强动物 → 狗
实现Runnable → Car
组合汽车 → 发动机
聚合中等班级 → 学生
关联中等学生 ↔ 课程
依赖最弱方法参数中的临时对象

组合

在 UML 中,组合表示一个对象包含另一个对象,并且两者的生命周期是一样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>

class Network {
public:
    void connect() {
        std::cout << "Connecting" << std::endl;
    }
};

class App {
private:
    Network m_network; // 对象成员

public:
    void run() {
        m_network.connect();
        std::cout << "Runnig" << std::endl;
    }
};

int main() {
    App app;
    app.run();
    while (true) {
        sleep(1);
    }
    return 0;
}

聚合

在 UML 中,聚合表示一个对象包含另一个对象,但两者的生命周期可以独立存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>

class Network
{
private:
    Network *network_; // 指针成员

public:
    void connect()
    {
        std::cout << "Connecting" << std::endl;
    }
};

class App
{
public:
    void run()
    {
        network_ = new Network;
        network_->connect();
        std::cout << "Runnig" << std::endl;
        delete network_;
    }
};

int main()
{
    App app;
    app.run();

    return 0;
}

TODO

本文由作者按照 CC BY 4.0 进行授权