学生聚合成了班级,班级没有学生,学生有多少都不影响他是一个班级。轮子,发动机,车架组合成了汽车。少了任何一个部件汽车都是不完整的。组合的依赖性更强。
同学你好,这里的super指的是Object类,这个Object类是所有类的超类(也称为父类)。
所有类的对象都实现这个Object类的方法。
以下就是本课的示例代码里
package com.imooc.jdkproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class LogHandler implements InvocationHandler {
private Object target;
public LogHandler(Object target) {
super();
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 日志开始
System.out.println("日志开始...");
method.invoke(target);
// 日志结束
System.out.println("日志结束...");
return null;
}
}
编程思想时通用的!
win+数字0调用出放大镜,按住win和+号,就可放大,按住win和-号,就可缩小
不是这样把 哪有那么简单 里面的结构布局都会变的
Car2里被你加了10个功能,但是如果我只想用其中3个,不想用其他的怎么办。所以说要分开,用哪几个组合那几个
个人理解:一群鸟,他们区分自己与兔子的区别是看有没有翅膀。 如果对方有翅膀(接口) 就视为自己人,可以一起飞...
同样,他们实现同样的接口 再传参的时候就避免了不同类的差异性(因为参数类型是那个接口)
我 可能理解的不到位 ,那样的话 还请指正 我是小白
测试类代码:
public class Main { public static void main(String[] args) { Car car = new Car(); CarTimeProxy ctp = new CarTimeProxy(car); CarLogProxy clp = new CarLogProxy(ctp); clp.move(); } }
cartime和carlog是两个代理类,他们分别为car代理了记录时间和日志的功能
cartime和carlog这两个代理类都实现了Moveable接口,同时要重写move方法
car汽车类也实现了Moveable接口的move方法,car类中的move方法只实现了汽车行驶的功能,并不实现记录时间和日志的功能。
重点来了,我们在main方法中调用move方法的时候其实是嵌套调用了,一层层的来调用的,main方法中clp先调用move方法时,先是执行自己实现的move方法里的操作,然后执行ctp的move方法里的操作,最后执行car对象本身的行驶操作。
直接在类内new一个对象是不好的,如果你在类内new一个对象,无论你怎样使用这个类,里边的对象都是定义好的,但是如果想把类里边的对象换成一个已经定义好的对象就没有办法了。不知道你能不能听懂?
???
没关系, 写着写着就有自己提高效率的习惯 , 设计模式就这么来的
你可以这么单纯的分开理解,就是A代理B B有代理C ,如果作者把new Car()影藏起来的话或许就看不出来是装饰者模式了
在静态代理中,继承代理比聚合代理劣,貌似他说过是类的叠加膨胀哦
这个问题问的好