黑马程序员技术交流社区
标题:
【成都校区】装饰设计模式小练习
[打印本页]
作者:
1581750802
时间:
2019-1-17 12:38
标题:
【成都校区】装饰设计模式小练习
* 装饰者设计模式的经典案例GoogleCar:需求:希望将GoogleCar的接入到生态圈平台,增强里面的相关功能
* 使用场景:二次开发的时候,拿不到源码,无法使用继承条件下,要对已经存在对象上的功能进行增强
* 前提:一定要拿到被装饰对象实现的所有接口
* 实现:自定义实现一个装饰类,实现相关的接口,为自定义装饰类传入被装饰类的对象
* 弊端:如果被实现的接口太多的话,装饰类中的方法过多冗余
/**
* @author NOT ME
* @description 定义一个汽车接口规范
* @create 2018/11/8 0008上午 10:58
*/
public interface ICar {
/**
* @description 实现类只需要覆盖重写该该方法就可以启动汽车
* @Date: 2018/11/8 0008 上午 10:58
*/
void start();
/**
* @description 实现类只需要覆盖重写该方法就可以运行汽车
* @Date: 2018/11/8 0008 上午 11:00
*/
void run();
/**
* @description 实现类只需要覆盖重写该方法就可以停止汽车
* @Date: 2018/11/8 0008 上午 11:01
*/
void stop();
}
/**
* @author NOT ME
* @description GoogleCar类实现了ICar这个接口,覆盖重写了所有的方法,在方法里面定义了谷歌Car的一系列操作汽车的方法
* 那么会把类设置成final类型,不能被其他的类继承,不能重写里面的方法,否则会造成隐患。
* 只能拿到jar包,也就是编译过后的字节码文件。
* @create 2018/11/8 0008上午 11:02
*/
public final class GoogleCar implements ICar {
@Override
public void start() {
System.out.println("汽车启动了");
}
@Override
public void run() {
System.out.println("汽车运行了");
}
@Override
public void stop() {
System.out.println("汽车停止了");
}
}
/**
* @author NOT ME
* @description 定义一个MyCar类实现了ICar接口
* @create 2018/11/8 0008上午 11:08
*/
public class MyCar implements ICar {
ICar car;
/**
* @description 在创建对象的同时,需要把GoogleCar的对象也传进来,通过GoogleCar的对象调用GoogleCar的方法
* @Date: 2018/11/8 0008 上午 11:21
*/
public MyCar(ICar car) {
this.car = car;
}
@Override
public void start() {
// 下面两行代码是增强的方法
System.out.println("今天天气良好");
System.out.println("今天道路稍微有点堵塞,但是不影响通行");
// 下面一行代码是GoogleCar的原方法,没有发生任何改变
car.start();
}
@Override
public void run() {
car.run();
}
@Override
public void stop() {
car.stop();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2