设计模式-类之间的关系

类之间的关系

https://www.cnblogs.com/tang321/p/14504409.html  参考

继承(类)/实现(接口)

是一个 is a 。继承就是在原有类A的基础上,新建一个类B,不过新建的类B是在A的基础上,继承父类(A)的属性以及方法。该模式是面相对象的基础。  继承是类的继承,组合是对象的组合   

img

img

依赖

use a 
依赖关系是比关联关系弱的一种关系,是所有关系中最弱的一种,在java语言中体现为返回值,参数,局部变量和静态方法调用。
依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。表现在代码层面,为类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。

img

关联

has a  类作为成员变量被使用

关联(Association),是类与类之间的联接。关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

表现在代码层面,为被关联类B以类的属性形式出现在关联类A中(成员变量),也可能是关联类A引用了一个类型为被关联类B的全局变量(静态变量)。在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。 

分为单向关联 双向关联 自关联  

img

在这里插入图片描述

img

自关联

在这里插入图片描述

关联之组合
组合(Composition) ,即“contain-a”关系,组合也是关联关系的一种特例,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,组合关系以实心菱形加实线箭头表示。 

在JAVA中,组合关系一般使用成员变量来实现,组合关系中的成员变量一般会在构造方法中赋值

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()); 
    } 
}

img

关联之聚合
有一个  has  a   
聚合(Aggregation),聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。在UML类图设计中,聚合关系以空心菱形加实线箭头表示。 

聚合关系中作为成员变量的类一般使用set方法赋值

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()); 
    } 
}

img

委托 – 六大关系中不包含委托。 有的地方会提到委托这个说法,理解为作为方法参数进行依赖。委托是不想实现继承时的一种解决方案。我不继承你,但是我关联委托你, 我方法的具体实现,都是调用你完成,实现代码复用

六大关系是指 (继承 实现 关联 组合 聚合 依赖)

委托是将一部分功能分割出去完成,即委托者(delegator)将自己委托给受托者(delegatee),受托者方法中参数为委托者对象;然后委托者调用受托者类对象。委托是通过方法参数实现。

组合示例
delegateA {  
   delegateeB b;  

   void methodA(); { b.methodB();;}  
}  

delegateeB {  
     void methodB(); {}  
}  

委托示例
delegateA {  
    delegateeB b;  

     void methodA(); { b.methodB(this);; }     
     void  do(); {}  
}  

delegateeB {  
     void methodB(delegateA a); { a.do();; }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值