GOF23种设计模式——类的关系介绍,包含依赖、泛化、聚合、组合关联等关系详细介绍和分析,详细透彻!

发布时间:2024年01月06日

依赖关系

通俗的讲,只要是再在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编译都不能通过?

构成依赖关系的四种情况:
1、类中的成员属性
2、方法的返回值
3、发方法接收的参数
4、方法中使用的类

泛化关系

泛化关系(Generalization)是面向对象编程中的一个重要概念,用于描述类之间的继承关系。在泛化关系中,一个类被认为是另一个类的一种特殊化或更具体的形式,继承了父类的属性和方法,并可以添加自己特有的属性和方法。

泛化关系使用箭头线段和一个空心三角形来表示,箭头线段从子类指向父类,空心三角形位于父类的一侧。通过使用泛化关系,我们可以将共性的属性和方法提取到一个通用的父类中,实现代码的重用和维护的方便性。

泛化关系遵循了面向对象编程的继承原则,包括单一继承、里氏替换、开闭原则等。通过泛化关系,我们可以建立起类的层次结构,提高代码的可扩展性和可维护性。同时,减少了代码的冗余,提高了代码的复用性。

需要注意的是,泛化关系是一种“is-a”关系,表示子类是父类的一种具体形式。子类可以继承父类的属性和方法,并可以添加自己特有的属性和方法,但不能修改父类的属性和方法的实现。

实现关系

通俗的讲,实现关系是就是A类实现B类,他是依赖关系的特例?

实现关系(Realization)是面向对象编程中的一种关系,用于描述接口和类之间的关系。在实现关系中,一个类实现了一个接口,即承诺实现接口中定义的所有方法。

实现关系使用虚线和一个空心三角形来表示,虚线连接实现类与接口,空心三角形位于接口的一侧。通过实现关系,一个类可以继承一个或多个接口的方法,并为其提供具体的实现。

实现关系与泛化关系的主要区别在于实现关系是一种"has-a"关系,表示类具备某种能力或功能。一个类可以实现多个接口,从而具备多种不同的能力。与泛化关系不同,实现关系中的类不会继承接口的属性,只继承方法的签名。

通过实现关系,我们可以实现接口的多态性,使得代码更加灵活和可扩展。接口可以定义一组相关方法,而具体的实现类可以根据需求提供不同的实现方式,从而可以适应不同的场景和需求。

实现关系主要用于解耦和抽象,通过将接口与具体实现分离,可以降低代码之间的依赖性,提高代码的可扩展性和可维护性。同时,实现关系也提供了一种程序设计的规范和约束,使得不同的类可以按照相同的接口进行交互和协作。

关联关系

一、关联关系定义
关联关系实际上就是类与类之间的联系,他也是依赖关系的特例

二、关联关系特点
该关系具有导航性,即双向关系或单向关系

聚合关系

表示的是整体和部分的关系,整体和部分是可以分开的。聚合关系是关联关系的特例。所以他具有关联的导航性和多重性
举例子:一台电脑上可能会由键盘、鼠标和显示器组成组成电脑的各个部件是可以从电脑上分离出来的,在UML类图中是使用带空心菱形的实线来表示

组合关系

一、组合关系定义
区别于聚合关系,在整体和部分的前提情况下,如果这个部分和整体是不能分割的,那么这个整体和部分就是组合的关系

还有一种特殊的情况,如果实际上两者是可以互相分割的,比如说:Penson类中定义的IdCard进行了级联删除,即删除Person的同时,也会删除IdCard,那么这两个类就是组合的关系了!


二、聚合和组合关系UML类图
实现是组合,空心菱形是聚合

至此,关于设计模式中涵盖的类关系介绍完毕,后续还会持续更新,敬请期待!!!

文章来源:https://blog.csdn.net/CNpeaceful/article/details/135344217
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。