依赖(use使用),<关联(has拥有),<聚合(has),<组合(contains包含),<继承(is是),<实现(is)
依赖是弱引用(强关系),其他都是强引用,关联,聚合,组合都属于关联关系。
关联关系所涉及的两个类是处在同一层次上的,
聚合是整体和个体之间的关系。(整体的消亡不代表个体的消亡,如汽车报废了,但轮胎可以是好的,轮胎还能接着用)
关联关系所涉及的两个类是处在同一层次上的,
而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分
组合关系是不能共享的。、代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。鸭子都有翅膀,但是A鸭子和B鸭子不能公用一双翅膀吧。
java中一般使用成员变量形式实现(体现关联关系)。对象之间存在着整体与部分的关系
class Driver {
//使用成员变量形式实现聚合关系
Car mycar;
public void drive(){
mycar.run();
}
}
聚合关系一般使用setter方法给成员变量赋值。
一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法
public Driver(Car car){
mycar = car;
}
假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法
所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
工厂(类)通过原料(类)生产产品(类)
工厂的生产需要原料,(原料出现在工厂类的局部变量)
依赖:
A-------->B
A依赖B
举例
public abstract class A{
public abstract C createC(B b);
A(){
B b=null;
}
}
//A是工厂,B是材料,C是产品。
//工厂依赖于材料才能产出产品
//即B是以参数的形式出现(存在)在A类中。
//B体现为局部变量,方法的参数、或静态方法的调用,B的变化会影响到A
关联:
A-------------------------->B
A关联着B
举例
public class A{
B b=new B();
public B createB(String x){
return new B();
}
public void showBinfo(){
system.out.println(b.getName();)
}
}
// B b=new A().createB("得到B");
//通过A能找到或得到B。A是线索,通过这条线索(关联关系),能寻找到B
// B体现为A的全局变量,
// A类知道(能通过方法调用)B类的公共属性和操作(B类的方法)
// A类有B类的引用,或者说A类中有B类的实例
//A持有B的引用
聚合:
A----------|<> B
A聚合B
举例
public class A {
B b=null;
A(B b){
this.b=b;
}
A(){}
}
//A弱拥有 B,即b对于a来说是可有可无的,a的生死存亡不会影响到B的生死存亡
//你传递了B,则A族群里就有了一个B,你不传递B,则A族群里就没有个体,A就是没有个体的群体。就像鹅群里可以没有黑鹅(聚合),它取决于黑鹅加不加入这个鹅群,但是鹅不能没有翅膀(组合),鹅诞生的时候就同时拥有了翅膀。
组合:
A----------|<<>> B
A组合B
举例
public class A {
B b;
A(){
b=new B();
}
}
//组合是一种强关系。A和B的生命周期一致,A生,B生,A亡,B亡
//A是人,B是手,足,A不能没有B,B也不能离开A
//在构造方法中,创建A的同时,B必然会被创建
继承:
A------------|> B
A继承于B
举例
public class A extends B{
supper();
}
实现:
A— ---- -----|> B
A实现B
举例
public class A implements B{}
工厂方法模式只有一个抽象产品类
具体工厂类只能创建一个具体产品类的实例
抽象工厂有多个抽象产品
具体工厂类可以创建多个具体产品类的实例
https://blog.csdn.net/xiao1_1bing/article/details/81774931?utm_source=app
https://blog.csdn.net/weixin_30896825/article/details/98544290?utm_source=app
https://blog.csdn.net/xiao1_1bing/article/details/81774931?utm_source=app
https://blog.csdn.net/wdjxxl/article/details/79608796
https://www.jianshu.com/p/4073bb2d7c6f