前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式(9)享元模式

Java设计模式(9)享元模式

作者头像
Jensen_97
发布2024-04-18 13:04:13
1040
发布2024-04-18 13:04:13
举报
文章被收录于专栏:技术客栈技术客栈

前言

在软件开发的世界里,设计模式如同一本精妙的编码诗集,已经成为一种标准的编程实践。在Java编程中,设计模式很重要。是软件开发中广泛应用的一种编程方法,它可以帮助开发人员更快地编写出高效、可靠和可维护的代码。本人将制作一个关于Java设计模式的系列文章,总共23种设计模式将以一篇一篇文章讲解,代码笔记已开源:Gitee点击跳转。在上一篇《Java设计模式(8)外观模式》文章中,我们介绍了外观模式。本文是这个系列的第九篇章,我们将讲解一下享元模式的实现方式、应用场景以及它的用途。

享元模式

享元模式是一种结构型设计模式,是通过共享对象来减少内存使用和提高性能。在该模式中,对象分为内部状态外部状态,其中内部状态是可共享的,而外部状态是不可共享的。通过共享内部状态,可以减少系统中重复对象的数量,从而减少内存消耗。

使用场景

  1. 当一个应用程序使用大量相似对象时,享元模式可以帮助减少内存消耗。
  2. 当对象的大部分状态可以外部化并且可以在多个对象中共享时,可以考虑使用享元模式。
  3. 当需要频繁创建和销毁对象,且创建对象的代价比维护对象的代价高时,可以使用享元模式来减少创建对象的数量。

代码实现

使用享元模式实现内外部状态描述;定义一个Flyweight接口

代码语言:javascript
复制
/**
 * 享元接口
 * @author Jensen
 * @date 2024-02-28
 * */
public interface Flyweight {
    void operation(String state);
}

创建 FlyweightImpl类 并实现状态的具体操作

代码语言:javascript
复制
public class FlyweightImpl implements Flyweight {
    private final String innerState;

    public FlyweightImpl(String innerState) {
        this.innerState = innerState;
    }

    @Override
    public void operation(String state) {
        System.out.println("外部状态是:"+state+","+"内部状态是:"+innerState);
    }
}

随后创建享元工厂类 FlyweightFactory 它负责管理 Flyweight 对象的创建和共享。

代码语言:javascript
复制
/**
 * 享元工厂
 * @author Jensen
 * @date 2024-02-28
 * */
public class FlyweightFactory {
    private final Map<String,Flyweight> flyweightMap = new HashMap<>();
    public Flyweight getFlyweight(String k){
        return flyweightMap.computeIfAbsent(k, FlyweightImpl::new);
    }
}

测试使用

代码语言:javascript
复制
System.out.println("------------------------------享元模式-----------------------------");
FlyweightFactory flyweightFactory = new FlyweightFactory();
Flyweight anxiety = flyweightFactory.getFlyweight("焦虑");
anxiety.operation("平淡");
anxiety.operation("开朗");

这里就简单的实现内部状态是可共享的,而外部状态是不可共享的;外部状态不管怎么变,其内部状态仍然是“焦虑”的。

image.png
image.png

结语

其实享元模式还有很多其他的应用场景,比如:

  • 在文本编辑器中,字符对象可以使用享元模式来共享相同的字符,节省内存空间。
  • 在游戏中,精灵对象可能存在大量重复,通过享元模式来共享相同的精灵对象,减少内存占用和提高渲染性能。
  • 在数据库连接池中的连接对象可以使用享元模式来复用,减少连接对象的创建和销毁,提高系统性能。等等。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 享元模式
  • 使用场景
  • 代码实现
    • 测试使用
    • 结语
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档