装饰模式简单介绍

简介: 装饰模式简单介绍
  • 装饰模式是动态的给对象添加增强它自身的其他功能。例如我买了一辆车,然后我想改装,轮子换成飞机用的,发送机换成火箭用的。。。
  • 代理模式是做一些除了本职的功能外不必关心的事情,例如rpc的调用只关心的是接口的调用,数据怎么通信不用关心;或者是记录日志;
  • 当然装饰模式也可以做到,但是两个的侧重点不一样装饰强调的是原有基础上增强功能,代理强调的更多的是对对象的控制完成一些其他的流程。装饰一般是通过继承(对象和真实装饰对象有相同的接口,可以多次装饰)增强、扩展原有功能实现,代理一般是通过系统自带的(Proxy 这个必须由接口类的)或者第三方的cglib(无需接口类)动态代理实现的。


装饰模式的实现demo



网络异常,图片无法展示
|


汽车改造例子

  • Component【car】定义一个对象接口或抽象类,可以给这些对象动态地添加职责。


public interface Car {
    public void getDecCar();
}
复制代码


  • Concrete Component【SuvCar】实际被动态地添加职责的对象


public class SuvCar implements Car{
  @Override
  public void getDecCar() {
    System.out.println("四轮越野车");
  }
}
复制代码


  • Decorator【CarDecorator】实现了Component【car】接口,用来扩展Component类的功能


public abstract class CarDecorator implements Car {
  private Car car;
  public CarDecorator(Car car) {
    this.car = car;
  }
  @Override
  public void getDecCar() {
       car.getDecCar();
  }
}
复制代码


  • Concrete Decorator【EngineDecorator】具体装饰者角色


public class EngineDecorator extends CarDecorator{
  public EngineDecorator(Car car) {
    super(car);
  }
    public void addEngine() {
      System.out.print("航空发动机  ");
    }
    @Override
  public void getDecCar() {
       super.getDecCar();
       addEngine();
  }
}
复制代码


  • 效果


网络异常,图片无法展示
|


  • 装饰的缺点要实现一大堆类,过度的引用会让程序变的复杂
  • java io中的实现是用的装饰模式实现的


网络异常,图片无法展示
|

相关文章
|
6月前
结构型 装饰器模式
结构型 装饰器模式
32 0
|
6月前
|
设计模式
装饰器模式
装饰器模式
33 0
|
6月前
|
设计模式 C++
【C++】—— 装饰器模式
【C++】—— 装饰器模式
装饰者模式
装饰者模式
72 0
|
设计模式
2023-6-26-第八式装饰器模式
2023-6-26-第八式装饰器模式
75 0
打扮一下(装饰模式)
打扮一下(装饰模式)
63 0
|
前端开发 BI
关于装饰器模式我所知道的
关于装饰器模式我所知道的
77 0
|
设计模式
我认为的装饰器模式
我认为的装饰器模式
98 0