设计原则
这里先将原则都罗列出来,在后续的具体模式中再具体讲解。
- 单一职责原则:应该有且仅有一个原因引起类的变更
- 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象
- 依赖倒置原则:面向接口编程
- 接口隔离原则:接口尽量细化,同时接口中的方法尽量少
- 迪米特法则:一个对象应该对其他对象有最少的了解
- 开闭原则:类应该对扩展开放,对修改关闭
类图
类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等
在UML类图中,类包含三部分:
- 类名
一个字符串 - 类的属性
格式:可见性 名称:类型[=默认值]
(1)可见性:对用于public,private,protected,default
(2)名称:一个字符串
(3)类型:数据类型
(4)默认值:初始化的值 - 类的操作
格式:可见性 名称(参数列表)[:返回值类型]
(1)参数列表:方法的参数列表,多个参数之间以逗号分隔
(2)返回值类型:返回值的数据格式
(3)可见性,名称同上
示例:
类的关系
- 关联关系
实线箭头表示,箭头指向(单向,指向自己,也可以双向)被依赖元素,表示一个类和另一个类有联系。
class Button{
}
class Form{
//一对多的关系
private List<Button> buttons;
}
min..max表示数量关系的区间。一个form中可以有零个或多个button,button不能单独存在。
- 依赖关系
虚线箭头表示,箭头指向被依赖的对象。表示一个类使用了另一个类,这种关系具有临时性特征,一个类的改变由于另一类而受影响。
class Car{
public void move(){}
}
class Driver{
public void drive(Car car){
car.move();
}
}
- 泛化关系
空心箭头实线表示,箭头指向父类。泛化关系表示类与类之间的继承关系。
class Animal{
public void move(){}
}
class Student extends Animal{
public void study(){}
}
- 实现关系
空心箭头虚线表示,箭头指向接口。表示类是接口所有特征和行为的实现。
interface IPeople{
public void study();
}
class People implements IPeople{
public void study(){}
}
- 聚合关系
带空心菱形头的实线表示,菱形头指向整体。表示整体与部分的关系,部分可以脱离整体而存在。
class Driver {
private Car car = null;
public void drive() {
car.run();
}
public void setCar(Car c){
car = c;
}
}
class Car {
public void run(){}
}
- 组合关系
带实心菱形头的实线表示,菱形头指向整体。表示整体与部分的关系,与聚合不同的是:这里整体与部分同生共死。
class Driver {
private Car car = null;
public Driver(Car car) {
this.car = car;
}
public void drive() {
car.run();
}
}
class Car {
public void run(){}
}