装饰器模式分析
简介
装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。降低系统的耦合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。
.
区别于适配器模式,这里的目的是为原有的功能进行装饰、扩展。而适配器的目的是将原有功能适配到目标所需接口
类图
代码示例
/*装饰器模式*/
public class DecorateModule {
interface ICar{
void move();
}
static class Car implements ICar{
@Override
public void move() {
System.out.println("基础功能.........");
}
}
//基类
static class SuperCar implements ICar{
Car car;
public SuperCar(Car car) {
this.car = car;
}
@Override
public void move() {
car.move();
}
}
static class WaterCar extends SuperCar{
public WaterCar(Car car) {
super(car);
}
void swim(){
System.out.println("水里跑。。。。。。。");
}
@Override
public void move() {
super.move();
swim();
}
}
public static void main(String[] args){
Car car = new Car();
car.move();
System.out.println();
WaterCar waterCar = new WaterCar(car);
waterCar.move();
}
}
优点
- 扩展对象功能,比继承灵活,不会导致类个数急剧增加
- 可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象
- 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构件子类和具体装饰子类
缺点
- 产生很多小对象。大量小对象占据内存,一定程度上影响性能 装饰模式易于出错,调试排查比较麻烦