上面是MyBatis中的一个适配器设计模式的类图。好多东西总是忘记,所以专门记录一下。
依赖关系:依赖(dependency),在代码中,某个类的方法通过局部变量,方法参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些任务.
比如:我们的PlainMethodInvoker类中的invoke方法
@Override
public Object invoke(Object proxy, Method method, Object[] args, SqlSession sqlSession) throws Throwable {
return mapperMethod.execute(sqlSession, args);
}
关联关系:关联(association)关系,用于表示一类对象与另一类对象之间的联系,使一个类知道另一个类的属性和行为.关联关系有单向关联,双向关联,自关联。
代码:通常是将一个类的对象作为另一个类的成员变量来实现.
比如:
private static class PlainMethodInvoker implements MapperMethodInvoker {
//关联关系,PlainMethodInvoker 持有MapperMethod成员变量
private final MapperMethod mapperMethod;
public PlainMethodInvoker(MapperMethod mapperMethod) {
super();
this.mapperMethod = mapperMethod;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args, SqlSession sqlSession) throws Throwable {
return mapperMethod.execute(sqlSession, args);
}
}
关联关系又细分为:组合关系和聚合关系
聚合关系:聚合(aggregation)关系是关联关系的一种,是强关联关系,是整体和部分的关系,是has-a的关系.
聚合关系也是通过成员对象来实现,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象单独存在。
组合关系:组合(composition)关系也是关联关系的一种,也是表示整体和部分的关系,整体对象控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在.部分对象不能脱离整理对象单独存在,比聚合关系更强。
泛化关系:对应JAVA中就是继承
实现关系:对应JAVA中就是接口