目录
1:什么是装饰器模式
装饰器模式允许向一个现有的对象添加新功能,同时不改变原有的结构。跟静态代理很相似。
但是装饰器能够扩展,不影响装饰对象和被装饰对象。
2:怎么使用装饰器模式
1:需要装饰的对象
//对象接口
public interface Car {
void run();
}
//具体的被装饰对象1
public class KaChe implements Car {
public void run() {
System.out.println("卡车的方法");
}
}
//具体的被装饰对象2
public class PaoChe implements Car {
public void run() {
System.out.println("跑车的方法");
}
}
2:装饰对象实现被装饰对象的接口
public class RedCarDecorator implements Car {
Car car;
//这里的构造方法是核心 构造不同的实现类
public RedCarDecorator(Car car) {
this.car = car;
}
//静态代理直接创建对象
// public RedCarDecorator(Car car) {
// this.car = new PaoChe();
// }
//装饰器的方法
private void color() {
System.out.println("加油");
}
//装饰器的方法
private void color1() {
System.out.println("熄火");
}
//装饰器方法可以新增不同的逻辑 不影响原来的被装饰类
public void run() {
color();
car.run();
color1();
}
}
3:测试类
@Test
public void t1(){
//装饰器模式和代理模式的区别
//代理模式 new 代理类
//装饰器模式
//new 原来的类
//new 装饰器类
//新增car的实现类不影响装饰器类
RedCarDecorator redCarDecorator=new RedCarDecorator(new KaChe());
redCarDecorator.run();
System.out.println("=============");
RedCarDecorator redCarDecorator1=new RedCarDecorator(new PaoChe());
redCarDecorator1.run();
}