合成聚合原则
定义:尽量使用对象组合/聚合, 而不是继承关系达到软件复用的目的
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。
合成聚合的优点
- (1) 新对象存取成分对象的唯一方法是通过成分对象的接口。
- (2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象看不见的。
- (3) 这种复用支持包装。
- (4) 这种复用所需的依赖较少。
- (5) 每一个新的类可以将焦点集中到一个任务上。
- (6) 这种复用可以再运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象。
(1)聚合用来表示“拥有”关系或者整体与部分的关系。
代表部分的对象有可能会被多个代表整体的对象所共享,而且不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏,部分的生命周期可以超越整体。例如,班级和学生,当班级删除后,学生还能存在,学生可以被培训机构引用。
class Student { } class Classes{ privateStudent student; publicClasses(Student student){ this.student=student; } }
(2)合成用来表示一种强得多的“拥有”关系。
在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新对象完全拥有对其组成部分的支配权,包括它们的创建和湮灭等。使用程序语言的术语来说,合成而成的新对象对组成部分的内存分配、内存释放有绝对的责任。
一个合成关系中的成分对象是不能与另一个合成关系共享的。一个成分对象在同一个时间内只能属于一个合成关系。如果一个合成关系湮灭了,那么所有的成分对象要么自己湮灭所有的成分对象(这种情况较为普遍)要么就得将这一责任交给别人(较为罕见)。
class Room{ public Room createRoom(){ System.out.println(“创建房间”); returnnew Room(); } } class House{ private Room room; public House(){ room=new Room(); } public void createHouse(){ room.createRoom(); } }
参考链接
https://www.tinymind.net.cn/articles/88c3b046534167
http://blog.csdn.net/hguisu/article/details/7571617