总有一些知识点,看起来似懂非懂,因此决定写几篇文章来对这些知识点总结归纳,顺便加强自己的理解,也欢迎各位积极指正其中理解不到位的地方。
在可复用处个人认为最难理解的地方就是委托(Delegation),因此此处着重讨论一下Java中的四种委托——Dependency、Association、Aggregation和Composition。
由弱到强分别是Dependency->Association,Association中Aggregation->Composition。
假设有两个类A和B,A的Rep中含有B的对象,并且在之后A委托B,调用了B的方法,这样的委托称作Association,否则,若B的对象只作为A的某方法中的局部变量出现,我们管这样的委托叫做Dependency。
比如对于下面这个再简单不过的类B:
public class B {
private final int num;
public B(int num){
this.num = num;
}
public int getNum() {
return num;
}
}
Dependency策略:
public class A {
private final int num;
public A(){
B b = new B(10);
num = b.getNum();
}
}
而关于Association策略,将其拆分成两部分,先来说较好理解的较强的Competition策略:
public class A {
private final int num;
private final B b = new B(10);
public A(){
num = b.getNum();
}
}
较弱的Aggregation策略:
public class A {
private final int num;
private final B b;
public A(int num){//此处传参也可以是B b,看使用场景
B b = new B(num);
this.b = b;
this.num = this.b.getNum();
}
}
是不是有些懵,不用担心,接下来来总结一下:
1)Dependency策略的委托就像是一个渣男/渣女委托你办事,用完你就把你给甩了,并且在以前或者以后甚至都看不出任何你存在过的痕迹。
2)Competition策略的委托截然不同,就像一个贞洁烈女,只要我委托你办事了,我就赖上你了,而且我的对象从此以后只能是你,不能是别人。
3)Aggregation比较中庸,我委托给你了,我的心中就给你了一个位置,或许在未来我的对象会变,但他也永远是你的那个类型。
用这种方式来理解委托的概念,是不是就好理解多了。以上就是知识点理解第一篇的全部内容了。