大三新开的Java设计模式,初学整理一些笔记
参考黑马课程和UML类图 - 简书
类图表示法
在UML类图中,类使用包含类名,属性(field)和方法(method)且带有分割线的矩形来表示,例如下图的person类,它包含name,age,sex这三个属性和study方法。
Person |
+ name : String - age : int - sex : String |
+ study(): void |
方法和属性名前面的"+","-"表示了这个方法或属性的可见性,UML类图中常见的表示可见性的符号有三种:
- + :表示public
- - :表示private
- # :表示protected
属性的完整表示方式是:可见性(+/-) 名称(name): 类型 (String)[ = 缺省值 ] 有初始化值在String 后加 = 加初始化值
方法的完整表示方式是:可见性 (+/-) 名称(study)(参数列表) [ : 返回值类型] 通常都有返回值,所以需要在 study 后加:加返回值类型
例子:
Fruit |
- name:String |
+ gather():void + product():void # plant(int time,String name): String |
在Fruit中定义了一个属性
name属性,修饰符为private,String属性
三个方法:
- gather()"采集"方法:修饰符为public,没有参数,没有返回值
- product()"加工"方法:修饰符为public,没有参数,没有返回值
- plant()"种植"方法:修饰符为protected,接受两个参数,第一个参数类型为int,第二个参数类型为String ,返回值为String
类与类之间关系的表现方式
关联关系
关联关系是一种引用关系,表示一类对象与另一类对象之间的联系,例如老师和学生,关联关系是类与类之间最常用的一种关系,分为一般关系,聚合关系和组合关系。
关联又可分为单向关联,双向关联和自关联。
1、单向关联
单向关联用一个带箭头的实线来表示。下图表示每一个水果都有一个地址,这通过让Fruit类持有一个类型为Address的成员变量实现。
2、双向关联
双向关联用一条不带箭头的实线表示。下图中Customer类中维护一个List<Product>,表示一个顾客可以购买多个商品;在Product类中维护一个 Customer类型的成员变量表示这个产品被哪个用户所购买。
双向关联就是双方各自持有对方类型的成员变量
3、自关联
自关联在UML类图中用一个带有箭头且指向自身的线表示,下图的意思就是Node类包含类型为Node的成员变量,也就是自己包含自己
聚合关系
聚合关系是强关系的一种,是强关联关系,是整体和部分之间的关系。
在UML中,聚合关系可以用带空心菱形的实线表示,菱形指向整体。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在,例如医院和医生,公交车和乘客,学校和老师等等。
组合关系
组合关系是一种更强烈的聚合关系
在UML中,组合关系用带菱形实心实线来表示,菱形指向实体。
在组合关系中整体对象可以控制部分对象的生命周期,一旦整体对象不在了,部分对象也将不在,部分对象不能脱离整体对象单独存在,例如头和嘴,书本和书本上的内容等等。
依赖关系
依赖关系是一种使用关系,它是对象之间最弱耦合方式的一种关系,是临时性的关联。 在代码中,某个类的方法通过局部变量、方法的参数和对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
在UML类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向依赖类。 下图显示的是司机和公交车,司机驾驶汽车。
继承关系
继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类和子类之间的关系,是一种继承关系。
在UML类图中,继承关系用带空心三角箭头的虚线来表示,箭头从子类指向父类。例如Student类和Teacher类都是Person的子类,其类图如下图所示:
实现关系
实现关系是接口与实现类之间的关系。在这种关系中类实现了接口,类中的操作实现了接口中所有的抽象操作。
在UML类图中,实现关系用空心三角箭头的虚线表示,箭头从实现类指向接口,例如,汽车和船实现了交通工具。