设计模式系列课程02之【类的关系详细理解】

本文详细介绍了面向对象设计模式中类的关系,包括依赖、关联、聚合、组合、继承和实现六种类型,并通过Java代码示例进行解释。这些关系的耦合度逐渐增强,从简单的使用到强绑定的组合关系,再到继承和实现接口的抽象扩展。通过对这些关系的理解,可以更好地设计和组织代码结构。
摘要由CSDN通过智能技术生成

转自:://blog.csdn.net/zhengzhb/article/details/7187278

在Java以及其他面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们之间的耦合度依次增强。


1、依赖(Dependence) ------------->

依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另外一个对象的实例,或者依赖另外一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在Java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的图列中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。

代码清单:

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作为成员变量。

代码清单:

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)

聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是互相独立的,而聚合关系的对象之间存在着包容关系,他们之间是整体-个体的互相关系。

代码清单:

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之间是组合关系,当人的生命周期开始时,必须同时具有灵魂和肉体,当人的生命周期结束时,灵魂肉体随之消失,无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

代码清单:

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、实现(Implementation)

表示一个类实现一个或者多个接口的方法,接口定义好操作的集合,由实现类去完成接口的具体操作。在Java中使用implements表示。UML图列中,实现关系用虚线+空心箭头表示,箭头指向接口,在Java中继承使用extends关键字,实现使用implements关键字,很直观,就不代码演示了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值