Java中常用的设计模式之装饰器模式详解

 更新时间:2022年02月27日 11:33:03   作者:Asurplus、  
这篇文章主要为大家详细介绍了Java中常用的设计模式之装饰器模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

优点

1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点

2.多层装饰比较复杂。

使用场景

1.扩展一个类的功能。

2.动态增加功能,动态撤销。

一、实现方式

假设一个场景,我们房间每天起床都要刷牙, 睡觉也要刷牙,刷牙的动作就是一个装饰器的作用,这样更利于我们的口腔健康。接下来我们就看看具体的装饰器如何实现。

1、每天生活的接口

package com.asurplus.common.decorator;
/**
 * 每天的生活接口
 */
public interface Live {
    /**
     * 每天需要做的事情
     */
    void live();
}

2、起床的实现类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 起床实现类
 */
@Slf4j
public class GetUpLive implements Live {
    @Override
    public void live() {
        log.info("起床了");
    }
}

3、睡觉的实现类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 睡觉实现类
 */
@Slf4j
public class SleepLive implements Live {
    @Override
    public void live() {
        log.info("睡觉了");
    }
}

4、装饰器类

package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 装饰器类
 */
@Slf4j
public class LiveDecorator {
    private Live live;
    public LiveDecorator(Live live) {
        this.live = live;
    }
    public void live() {
        // 生活
        live.live();
        // 刷牙
        brushTeeth();
    }
    private void brushTeeth() {
        log.info("刷牙去咯");
    }
}

二、测试

package com.asurplus.common.decorator;
/**
 * 装饰器模式
 */
public class TestMain {
    public static void main(String[] args) {
        // 起床
        LiveDecorator getUp = new LiveDecorator(new GetUpLive());
        getUp.live();
        System.out.println();
        // 睡觉
        LiveDecorator sleep = new LiveDecorator(new SleepLive());
        sleep.live();
    }
}

输出结果

在这里插入图片描述

可以看出,起床和睡觉,都刷了牙,从而实现了我们的装饰器模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!  

相关文章

  • idea自动加载html、js而无需重启进程的操作

    idea自动加载html、js而无需重启进程的操作

    这篇文章主要介绍了idea自动加载html、js而无需重启进程的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 如何在 Spring Boot 中配置和使用 CSRF 保护

    如何在 Spring Boot 中配置和使用 CSRF 保护

    CSRF是一种网络攻击,它利用已认证用户的身份来执行未经用户同意的操作,Spring Boot 提供了内置的 CSRF 保护机制,可以帮助您防止这种类型的攻击,这篇文章主要介绍了Spring Boot 中的 CSRF 保护配置的使用方法,需要的朋友可以参考下
    2023-09-09
  • Mybatis XML配置文件实现增删改查的示例代码

    Mybatis XML配置文件实现增删改查的示例代码

    本文主要介绍了Mybatis XML配置文件实现增删改查的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • SpringCloud Feign配置应用详细介绍

    SpringCloud Feign配置应用详细介绍

    这篇文章主要介绍了SpringCloud Feign配置应用,feign是netflix提供的服务间基于http的rpc调用框架,在spring cloud得到广泛应用
    2022-09-09
  • Java8新特性之方法引用的实践指南

    Java8新特性之方法引用的实践指南

    这篇文章主要给大家介绍了关于Java8新特性之方法引用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 浅谈Spring Boot 异常处理篇

    浅谈Spring Boot 异常处理篇

    本篇文章主要介绍了浅谈Spring Boot 异常处理篇,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java服务器宕机的解决方法论

    Java服务器宕机的解决方法论

    这篇文章主要介绍了Java服务器宕机的解决方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring Data分页与排序的实现方法

    Spring Data分页与排序的实现方法

    这篇文章主要给大家介绍了关于Spring Data分页与排序的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件

    浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及Spr

    这篇文章主要介绍了浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring中存对象和取对象的方式详解

    Spring中存对象和取对象的方式详解

    这篇文章主要介绍了Spring中存对象和取对象的方式,Spring中更简单的存对象与取对象的方式是注解,注解实现有两种方式:一在编译的时候,把注解替换成相关代码,并添加到我们原来的代码中,二拦截方法,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-08-08

最新评论