我编写了如下代码希望能对大家理解装饰者有更好的帮助
public interface Car {
void run();// 车跑的方法
void stop();//停车
int oilTank();//油箱大小
void driver(String driverName);//谁开的
}
//一辆QQ车
public class QQ implements Car{
@Override
public void run() {
try {
Thread.sleep(1000);
System.out.println("qq完成百公里加速");
} catch (Exception e) {
}
}
@Override
public void stop() {
System.out.println("qq刹车了");
}
@Override
public int oilTank() {
return 50;
}
@Override
public void driver(String driverName) {
System.out.println(driverName+"正在驾驶qq");
}
}
我们在这里做个测试类
public class CarTest {
public static void main(String[] args) {
QQ qq = new QQ();
qq.run();
//输出QQ完成百公里加速
//那么我想要QQ车增加一些其他功能 比如百公里加速的时间 加个 汽车尾翼等
}
}
接下来我要再定义一个QQWrapper 类实现Car接口在加上QQ车百公里加速的功能
public class QQWrapper implements Car {
private Car qq;
加强对象持有原有对象的引用,
public QQWrapper(Car qq) {
super();
this.qq = qq;
}
@Override
public void run() {
long start = System.currentTimeMillis();
qq.run();
long end = System.currentTimeMillis();
System.out.println("百公里加速用时"+(end-start));
需要加强的方法 加强我需要的逻辑
不需要加强的方法 实现我原来的逻辑
}
@Override
public void stop() {
qq.stop();
}
@Override
public int oilTank() {
return qq.oilTank();
}
@Override
public void driver(String driverName) {
qq.driver(driverName);
}
}
QQWrapper qqWrapper = new QQWrapper(qq);
把原有qq对象 给qqWrapper 让他跑一下
qqWrapper.run();
//输出QQ完成百公里加速
百公里加速用时1001