C#面向对象设计原则之组合/聚合复用原则

向北走
向北走
发布时间:2026-10-13| 5人浏览过
原创

在C#等面向对象语言中,如何高效且灵活地复用代码是设计的关键。组合/聚合复用原则主张优先使用对象间的组合或聚合关系来实现复用,以替代传统的继承方式。这种方式能显著降低系统耦合度,提高模块的独立性与可维护性。

为什么优先选择组合或聚合?

在软件设计中,代码复用的常见方式包括继承、组合和聚合。虽然继承最为直观,但它会建立类之间最紧密的耦合关系:

  • 继承的风险:父类与子类紧密绑定。若父类的实现发生变更,可能会直接破坏子类的逻辑;反之亦然。此外,继承在编译时静态确定,运行时无法动态调整行为。
  • 组合的优势:通过在一个类中持有另一个对象的引用,在运行时刻动态定义行为。这不仅要求接口定义清晰,还实现了良好的封装。只要类型匹配,可在运行时通过替换不同对象来改变行为,极大地提升了灵活性。

第1步:理解组合关系(强依赖)

组合表示“整体-部分”的关系,其中部分不能脱离整体而存在。如果整体销毁,部分也随之失效。

典型场景:飞机与机翼。飞机的飞行功能依赖于机翼,没有机翼飞机无法构成完整实体。

以下代码展示了如何使用组合实现代码复用。这里Plane类内部声明了Airfoil(机翼)类的私有变量,通过调用机翼的方法来复用其功能。

using System;

namespace 组合聚合复用原则
{
    /// <summary>
    /// 定义一个飞机翅膀类
    /// </summary>
    public class Airfoil
    {
        public void AdjustAngle()
        {
            Console.WriteLine("调整角度");
        }
    }

    public class Plane
    {
        // 定义一个私有的飞机翅膀类的变量
        private Airfoil airfoil;
        
        public void Fly()
        {
            // 使用组合实现代码的复用
            if (airfoil != null)
            {
                airfoil.AdjustAngle();
            }
        }
    }
}

第2步:理解聚合关系(弱依赖)

聚合同样表示“整体-部分”的关系,但允许部分独立于整体存在。整体可以拥有多个或部分,且部分可以被其他整体共享。

典型场景:火车与车厢。火车可以挂载车厢,也可以卸载车厢甚至不挂载;车厢既可以属于这列火车,也可以挂接在另一列火车上。

以下示例中,Train类包含对RailwayCarriage(车厢)的引用。这种设计使得Carry方法在处理载荷时更加健壮,因为它检查了车厢是否存在,从而支持灵活的装载逻辑。

using System;

namespace 组合聚合复用原则
{
    /// <summary>
    /// 定义一个车厢类
    /// </summary>
    public class RailwayCarriage
    {
        public void Loading()
        {
            Console.WriteLine("车厢装载118人");
        }
    }

    /// <summary>
    /// 定义一个火车类
    /// </summary>
    public class Train
    {
        // 定义一个私有的车厢类的变量(在一个类中定义另外一个类的引用)
        private RailwayCarriage rc;
        
        public void Carry()
        {
            // 可以使用车厢,也可以不使用车厢
           if(rc!=null)
           {
               rc.Loading();
           }
           Console.WriteLine("车头装载5人");
        }

        public void Run()
        { }
    }
}

总结与应用建议

在设计C#类结构时,应遵循“多用组合,少用继承”的原则。组合与聚合允许我们在不修改原有类代码的情况下,通过组合新的对象来获取新功能。这不仅满足了开闭原则(对扩展开放,对修改关闭),还有助于构建更松耦合、易于测试和维护的系统架构。

以上就是C#面向对象设计原则之组合/聚合复用原则的详细内容,更多关于C#面向对象设计的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。