最近学习了设计模式,每个模式都需要先画类图,通过这次学习,又对六大关系有了新的理解。
一:六大关系的强弱
继承>实现>组合>聚合>关联>依赖
二:六大关系的图形表示
继承:
实现:
组合:
聚合:
关联:
依赖:
三:六大关系在代码里如何体现
继承和实现:这两种关系在C#种体现特别直观,如果A类继承了B类,就表为Class A:B,如果B类是个接口,A实现了B,仍表示为A:B,在C#中,一个类只能继承一个父类,但是可以实现多个接口
组合和聚合:组合和聚合说的都是部分和整体的关系,二者的区别在于,组合时,部分无法脱离整体而存在,聚合时部分可以脱离整体而存在。
聚合在代码中的体现:
class A
{
B b;
public A(B b)
{
this.b = b;
}
}
class B
{
}
A类聚合了B类,B类在类A中作为成员变量,B类作为一个参数,传到A类的构造函数中。B类可以脱离A类单独而存在。B类没有封装在A类里,客户是可以同时知道A类和B类的。
组合在代码中的体现:
class A
{
B b;
public A()
{
b = new B();
}
}
class B
{
}
A类组合了B类,B类的对象在A类的构造函数中产生,当需要产生一个A类的对象时候,需要先调用B类的构造函数。客户端是看不到B类的,B类被封装在A类里面。A类和B类同生共死。
依赖和关联:依赖和关联表示的是一种使用的关系,A类使用B类。
依赖:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。
//动物依赖水类,水类是动物类中的某个方法
public class Animal
{
public void Grownup()
{
Water water = null;
}
}
public class Water
{
public Water()
{ }
}
//水类作为动物类中某个方法的参数或返回值
public class Animal
{
public Water Grownup(Water water)
{
return null;
}
}
public class Water
{
public Water()
{ }
}
关联:关联和依赖的最主要区别就是,类A当中使用了类B,让类B作为类A的全局变量。作用的范围更大,类A和类B就是关联关系。
//水类作为动物类的全局变量
public class Animal
{
Water water;
}
public class Water
{
public Water()
{ }
}
以上就是我对六大关系的总结。