学设计模式过去有一段时间了,一转头,发现很多都忘了,决定重新学一遍,顺便记录下---------------
说到设计模式,难免就要画UML,我使用StarUML。
一、设计模式中的关系
一般有六种:依赖、关联、聚合、组合、继承和实现
1、依赖(Dependency): -------->
依赖表示一个类依赖于另一个类的定义,如下图:
People类依赖于Book类,Book类作为people的方法参数
一般而言,依赖的表现为类A作为类B的局部变量、方法形参、静态方法调用
2、关联(Association):
当一个对象与另一个对象的特定实例间存在某种关系时可称为关联,如下图:
代码如下:
1 Book book = new Book("gof") 2 public void read(){ 3 String name = this.book.getName(); 4 System.out.printf("start read %s",name); 5 book.reading(); 6 }
关联的表现为类B作为类A的成员变量,一般直接在声明的时候实例化或在setter中实例化:
Book book = new Book("xxx");
3、聚合(aggregation):
聚合与关联相似,但耦合度强于关联。语义上关联关系的对象是相互独立的,而聚合中的对象则更像是“整体-个体”关系
对象(Book和Food)作为People的部分出现,在People中作为成员变量,一般使用setter赋值
4、组合(Composition):
组合的耦合度较高,与聚合相比,组合在语义上属于“同生共死的关系”。
必须有head和body才能创造出people,当people死亡(结束周期),head和body也随之结束。在程序中,组合关系通常是在构造函数中赋值
5、继承(Generalization)
这个没什么说的:
6、实现(implementation)
继承和实现很简单,就不用多介绍了。
在具体使用中,要根据不同语境使用相应的关系:
1、依赖和关联:
依赖是两个相互独立的类,两个之间没有特定、长久的联系,只是临时性的放到一起;
关联的两个对象之间有一定的关系,如朋友、父子之类的。和依赖相似,都是等阶的类。
2、关联和聚合:
关联一般就表示两个类之间有联系
相比关联,聚合有种“整体-部分”关系,耦合性更强
3、聚合和组合:
聚合没有强制性的关系,类结合到一起,如A拥有B和C,B和C可以组成A
组合要求有一致的周期性,强调A包含了B和C,B和C作为A的一部分