设计模式类之间的关系.docx_第1页
设计模式类之间的关系.docx_第2页
设计模式类之间的关系.docx_第3页
设计模式类之间的关系.docx_第4页
设计模式类之间的关系.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计模式中类的关系 在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。1.依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的图例中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。代码样例:java view plaincopyprint?1. publicclassPeople2. /Book作为read方法的形参3. publicvoidread(Bookbook)4. System.out.println(“读的书是”+book.getName();5. 6. public class People /Book作为read方法的形参 public void read(Book book) System.out.println(“读的书是”+book.getName(); 2.关联(Association)、单向关联:双向关联: 对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。代码样例:java view plaincopyprint?1. publicclassSon2. /关联关系中作为成员变量的类一般会在类中赋值3. Fatherfather=newFather();4. publicvoidgetGift()5. System.out.println(“从”+father.getName()+”获得礼物”);6. 7. 8. 9. publicclassFather10. Sonson=newSon();11. publicvoidgiveGift()12. System.out.println(“送给”+son.getName()+“礼物”);13. 14. public class Son /关联关系中作为成员变量的类一般会在类中赋值 Father father = new Father(); public void getGift() System.out.println(“从”+father.getName()+”获得礼物”); public class Father Son son = new Son(); public void giveGift() System.out.println(“送给”+son.getName()+“礼物”); 3.聚合(Aggregation) 聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。代码样例:java view plaincopyprint?1. publicclassPeople2. Carcar;3. Househouse;4. /聚合关系中作为成员变量的类一般使用set方法赋值5. publicvoidsetCar(Carcar)6. This.car=car;7. 8. publicvoidsetHouse(Househouse)9. This.house=house;10. 11. 12. publicvoiddriver()13. System.out.println(“车的型号:”+car.getType();14. 15. publicvoidsleep()16. System.out.println(“我在房子里睡觉:”+house.getAddress();17. 18. public class People Car car; House house; /聚合关系中作为成员变量的类一般使用set方法赋值 public void setCar(Car car) This.car = car; public void setHouse(House house) This.house = house; public void driver() System.out.println(“车的型号:”+car.getType(); public void sleep() System.out.println(“我在房子里睡觉:”+house.getAddress(); 4.组合(Composition) 相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。在下图的例子中,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。java view plaincopyprint?1. PublicclassPeople2. Soulsoul;3. Bodybody;4. /组合关系中的成员变量一般会在构造方法中赋值5. PublicPeople(Soulsoul,Bodybody)6. This.soul=soul;7. This.body=body;8. 9. 10. Publicvoidstudy()11. System.out.println(“学习要用灵魂”+soul.getName();12. 13. Publicvoideat()14. System.out.println(“吃饭用身体:”+body.getName();15. 16. Public class People Soul soul; Body body; /组合关系中的成员变量一般会在构造方法中赋值 Public People(Soul soul, Body body) This.soul = soul; This.body = body; Public void study() System.out.println(“学习要用灵魂”+soul.getName(); Public void eat() System.out.println(“吃饭用身体:”+body.getName(); 5.继承(Generalization) 继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。UML图例中,继承关系用实线+空心箭头表示,箭头指向父类。6.实现(Implem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论