设计模式入门之类与类之间的关系和UML图
前言
学习设计模式,避免不了学习类和类之间的关系,因为设计模式的底层其实就是类和类之间的关系,只有理解了类和类之间的关系才可以理解更加深层次的设计模式。
类关系概述
- is a包括了 继承,实现关系
- has a包括了 组合,聚合,关联关系
- use a包括了 依赖关系
5大关系
继承
继承,就是对原来的类进行加强。就好像对装备进行升级,对动物的种类进行扩充。非常常用,就不多说了。
public class Animal{}
public class Dog extends Animal{}
实现
就是一个类对一个接口进行实现,把原来抽象的东西具体化了。就好像数学里面有个公式 y = x + 3*n , 然后我们实现这个抽象的公式就可以通过代入 x=3,n=5 来得出 y 的值,就把抽象的公式用了起来,可以计算出实际的东西。
public interface UserService{}
public class UserServiceImpl implements UserService{}
弱依赖
一个类使用到了另外一个类,但是这个使用时偶然的、临时性的。
火车可以进行移动,但是移动方式可以看做是一个对象,移动的方式改变就会影响火车的行为。可以看到我们在这里依赖的引入是在一个方法签名当中,可能只有这个方法会用到这个依赖对象,所以这个方法一旦结束,那么这个依赖对象就不会对这个类造成影响。
public class Train{
public void move(){}
}
public class Person{
public void move(Train train){
train.move();
}
}
强依赖(关联)
比依赖更加强的关系,关系不是偶然、临时性的。比如你和你的朋友,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向的、双向的。
爸爸和儿子之间的关系可以是双向的,爸爸有时候会需要儿子的帮助,儿子有时候也会需要用到爸爸帮助。两者是平等的,并且这种关系通常是长期的。
public class Father{
private Son son;
public void setSister(Son son){
this.son = son;
}
}
public class Son{
private Father father;
publicvoid setBrother(Father father){
this.father = father;
}
}
弱聚合
关联的一种特殊形式,整体和部分的关系。整体和部分是可以分离的,他们可以有各自的生命周期,部分可以属于整个对象,也可以作为整个对象共享。比如汽车和发动机之间的关系,汽车需要有发动机,但是发动机的型号可以各种类型的,发动机的可以在制造新车的时候提供不同的发动机类型。
汽车需要有发动机,但是中途发动机的类型是可以进行改变的。
public class Engine{}
public class Car{
private Engine engine;
public Car(Engine engine){
this.engine=engine;
}
public replaceEngine(Engine engine){
this.engine = engine;
}
}
强聚合(组合)
特殊的聚合,也是整体和部分的关系,但是整体不能离开部分。整体和部分的生命周期通常是相同的,例如人和人的心脏。
人的心脏是惟一的,从人的出生开始就会创建一个心脏,这个心脏在后面是不会进行更换的。伴随这个人的终生。
public class Heart{}
public class Person{
private Heart heart;
public Person(){
this.heart=new Heart();
}
}
UML类图
类图中大对象
1. 类(Class)
2. 接口(Interface)
3. 包(Package)
4. 注释(Note)
对象之间的关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
泛化
泛化(Generalization)表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系
1. 继承
2. 实现
依赖
关联
聚合
组合
对象细分属性
-表示private
#表示protected
~表示default,也就是包权限
_下划线表示static
斜体表示抽象