装饰模式简单介绍

简介: 装饰模式简单介绍
  • 装饰模式是动态的给对象添加增强它自身的其他功能。例如我买了一辆车,然后我想改装,轮子换成飞机用的,发送机换成火箭用的。。。
  • 代理模式是做一些除了本职的功能外不必关心的事情,例如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中的实现是用的装饰模式实现的


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

相关文章
打扮一下(装饰模式)
打扮一下(装饰模式)
86 0
|
编解码 Android开发
和空姐一起聊聊装饰模式
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程0...
1472 0
22装饰模式
 1装饰模式的核心内容是: A:通过中间这向多方发送消息 2装饰模式的作用:。 3装饰模式具体描述 装饰模式:装饰模式以对客户端透明的方式扩展对象的功能, 是继承关系的一个替代方案,提供比继承更多的灵活性。 动态给一个对象增加功能,这些功能可以再动态的撤消。 增加由一些基本功能的排列组合而产生的非常大量的功能。   Mary过
888 0
|
Java uml
人要衣装,佛要金装之装饰模式
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
138 0
人要衣装,佛要金装之装饰模式
|
Java
结构型模式-装饰者模式
结构型模式-装饰者模式
97 0
|
应用服务中间件 智能硬件 容器
结构型模式-外观模式
结构型模式-外观模式
95 0
|
C#
C#类的装饰模式
慢慢有点感觉了。 在继承类里初始化一个父类,也就是基本数据类型的延伸吧。 那进一步想,在多线程环境下,信号同步和锁,共享内存的实现不是又增加了现实难度? 1 /* 2 * Created by SharpDevelop.
816 0
|
uml 索引
装饰者模式-结构型
原理  装饰器模式: 动态地给一个对象添加一些额外的职责或者行为。就增加功能来说, Decorator模式相比生成子类更为灵活。  装饰器模式提供了改变子类的灵活方案。装饰器模式在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。
763 0

热门文章

最新文章