装饰模式简单介绍

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


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

相关文章
|
7月前
|
小程序 数据安全/隐私保护 开发者
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
393 3
|
8月前
|
Java 应用服务中间件 Spring
SpringBoot 响应请求是串行还是并行?
Spring Boot 在默认情况下通过 Servlet 容器的线程池实现并行处理 HTTP 请求。通过适当的线程池配置,可以进一步优化并发性能。此外,Spring Boot 提供了异步处理机制(如使用 `@Async` 注解)和反应式编程模型(Spring WebFlux),使得应用能够处理更高的并发负载。在具体项目中,可以根据需求选择合适的处理模型,以充分利用 Spring Boot 的并发处理能力。
239 21
|
算法 算法框架/工具 计算机视觉
Stable diffusion采样器详解
在我们使用SD web UI的过程中,有很多采样器可以选择,那么什么是采样器?它们是如何工作的?它们之间有什么区别?你应该使用哪一个?这篇文章将会给你想要的答案。
Stable diffusion采样器详解
|
监控 Go 开发者
掌握Go语言中的日志管理
【8月更文挑战第31天】
157 0
|
11月前
|
存储 Windows
电脑d盘不见了怎么恢复?
在使用电脑的时候,我们可能会遇到这样一个问题,电脑里的D盘突然不见了,在“此电脑”中看不到D盘了。这这个情况可能会让人感到非常困惑甚至是头疼,因为D盘里面可能存放着非常重要的文件。今天的内容要和大家分析一下D盘不见的原因,并且介绍两个简单的方法,找回D盘。
|
SQL 关系型数据库 MySQL
MySQL查询(万字超详细版)
本文详细介绍了数据库中的单表和多表查询方法。首先,单表查询包括全列查询、指定列查询及去重查询,其中应避免使用`*`以提高效率。接着,文章讲解了排序查询,包括升序和降序,并展示了如何通过多个字段进行排序。在多表查询部分,本文解释了内连接、外连接(左外连接和右外连接)以及自连接的概念和用法,提供了丰富的代码示例
407 2
MySQL查询(万字超详细版)
|
存储 程序员 定位技术
程序员必知:地图投影与ArcGIS坐标系转换
程序员必知:地图投影与ArcGIS坐标系转换
277 0
|
机器学习/深度学习 传感器 物联网
【Python机器学习专栏】机器学习在物联网(IoT)中的集成
【4月更文挑战第30天】本文探讨了机器学习在物联网(IoT)中的应用,包括数据收集预处理、实时分析决策和模型训练更新。机器学习被用于智能家居、工业自动化和健康监测等领域,例如预测居民行为以优化能源效率和设备维护。Python是支持物联网项目机器学习集成的重要工具,文中给出了一个使用`scikit-learn`预测温度的简单示例。尽管面临数据隐私、安全性和模型解释性等挑战,但物联网与机器学习的结合将持续推动各行业的创新和智能化。
430 1
|
SQL Cloud Native 架构师
深入浅出Presto:大数据查询引擎的原理与应用
【4月更文挑战第7天】Presto是高性能的分布式SQL查询引擎,专为大规模数据交互式分析设计。它采用分离式架构,内存计算和动态规划优化查询,支持跨源查询、交互式查询和ANSI SQL兼容性。应用于大数据分析、实时数据湖查询和云原生部署。Presto的灵活性和效率使其在大数据处理领域备受推崇,适合分析师、数据科学家和IT架构师使用。未来将在博客中分享更多实践和案例。
1463 1

热门文章

最新文章