设计模式-UML类图关系(依赖、泛化、实现、组合、聚合)

1.UML类图

UML——Unified modeling language UML( 统一建模语言 ),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果

UML图的分类
	用例图
	静态结构图:类图、对象图、包图、组件图、部署图
	动态行为图:交互图(时序图与协作图)、状态图、活动图

UML类图本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如图:
设计模式-UML类图关系(依赖、泛化、实现、组合、聚合)_第1张图片
图中使用的软件为Ecplise中的AmaterasUML,如需安装可参考这篇文章:
Eclipse下安装AmaterasUML插件的方法

2.UML类图关系

2.1依赖关系(Dependence)
如果没有对方,连编绎都通过不了,称之为依赖关系。

只要是在类中用到了对方,那么它们之间就存在依赖关系。那么什么是用到呢?
B b 是A类的成员属性;
B是A类某方法的返回类型 : B function(){};
B是A类某方法接收的参数类型: function(B b){};
A类某方法中使用到B b对象: function(){ B b=new B();}
注:该命题的逆命题不成立,之后的泛化,实现会具体解释其原因。

2.2.泛化关系(generalization)VS实现关系(Implementation)
泛化关系实际上就是继承关系,A类继承B类;
实现关系实际上就是A类实现B接口。

注:泛化关系和实现关系是依赖关系的特例,因为如果没有父类,子类无法编译通过。

2.3关联关系(Association)
关联关系实际上就是 类与类之间的联系
关联具有导航性:即双向关系或单向关系
关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个),
“0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m个)。
设计模式-UML类图关系(依赖、泛化、实现、组合、聚合)_第2张图片
注:关联关系是依赖关系的特例,因为如果没有被关联类,关联类无法编译通过。

2.4聚合关系(Aggregation)VS组合关系(Composition)
聚合关系:表示的是整体和部分的关系,整体与部分可以分开。
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。

eg.电脑有显示屏,键盘
如果我们认为显示屏,键盘和电脑是可分离的,那么电脑和显示屏,键盘就是聚合关系

/*
*聚合关系:在new Computer()时没有键盘和显示屏对象
*在之后可自己进行设置,computer.setk(k),computer.setm(m)
*/
class Computer{
        private KeyBoard k;      //键盘
        private Monitor m;       //显示屏
        
        public setk(KeyBoard k){
                this.k=k;
        }
        public setm(Minitor k){
                this.m=m;
        }
}

如果我们认为显示屏,键盘和电脑是不可分离的,那么电脑和显示屏,键盘就是组合关系

/*
*组合关系:在new Computer()时就已经存在键盘和显示器对象
*/
//方式一:
class Computer{
	private KeyBoard k=new KeyBoard();  //键盘
	private Monitor m=new Monitor();    //显示器
}

//方式二:
class Computer{
	private KeyBoard k;      //键盘
	private Monitor m;        //显示器
    
    //构造器(不存在其它无参构造器)
    public Computer(KeyBoard k,Monitor m){
        this.k=k;
    	  this.m=m;
    }
}

注:类的成员属性,存在依赖关系。

参考:尚硅谷-图解Java设计模式(韩顺平)
如有错误,欢迎指正。

你可能感兴趣的:(设计模式)