【设计模式-08】Flyweight享元模式

这篇具有很好参考价值的文章主要介绍了【设计模式-08】Flyweight享元模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简要说明

简要的理解:享元模式就是新建一个池(Pool),该池子(Pool)中有新建好的一堆对象,当需要使用时,从池子(Pool)中直接获取,不用重新新建一个对象。通俗的讲就是:共享元数据

  • 比如Java中的String就是使用享元模式,String的值存储在一个内存池中,不用每次分配一个内存存储字符串的值。
  • 再比如:App客户端中TableView列表中的TableViewCell也是最经典的享元模式,一个TableView列表中的Cell是重复利用,最大限度的重复利用,以此保证整个列表流畅度。

【设计模式-08】Flyweight享元模式,MCA,# 设计模式,设计模式,享元模式

结合组合模式(Composite)

如图中的紫色部分,可以作为一个组合进行共享使用,即结合了组合模式(Composite)的享元模式。

【设计模式-08】Flyweight享元模式,MCA,# 设计模式,设计模式,享元模式

一、代码实现

1、Java String中的享元模式

/**
 * @description: Java String 中的享元模式
 * @author: flygo
 * @time: 2022/7/21 11:32
 */
public class TestString {

  public static void main(String[] args) {
    String s1 = "abc";
    String s2 = "abc";

    String s3 = new String("abc");
    String s4 = new String("abc");

    System.out.println(s1 == s2); // true
    System.out.println(s1 == s3); // false
    System.out.println(s3 == s4); // false
    System.out.println(s3.intern() == s1); // true
    System.out.println(s3.intern() == s4.intern()); // true
  }
}

2、对象池模拟Flyweight享元模式

【设计模式-08】Flyweight享元模式,MCA,# 设计模式,设计模式,享元模式

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @description: 对象池模拟Flyweight享元模式
 * @author: flygo
 * @time: 2022/7/21 11:37
 */
public class BulletPool {

  List<Bullet> bulletList = new ArrayList<>();

  {
    for (int i = 0; i < 5; i++) {
      bulletList.add(new Bullet());
    }
  }

  public Bullet getBullet() {
    for (int i = 0; i < bulletList.size(); i++) {
      Bullet b = bulletList.get(i);
      if (!b.living) {
        return b;
      }
    }
    return new Bullet();
  }

  public static void main(String[] args) {
    BulletPool bp = new BulletPool();

    for (int i = 0; i < 10; i++) {
      Bullet bullet = bp.getBullet();
      System.out.println(bullet);
    }
  }
}

class Bullet {
  public UUID id = UUID.randomUUID();
  boolean living = true;

  @Override
  public String toString() {
    return "Bullet{" + "id=" + id + '}';
  }
}

二、源码地址

https://github.com/jxaufang168/Design-Patternshttps://github.com/jxaufang168/Design-Patterns文章来源地址https://www.toymoban.com/news/detail-809948.html

到了这里,关于【设计模式-08】Flyweight享元模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式——学习笔记】23种设计模式——享元模式Flyweight(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    你的公司主要做一些小型的外包项目,之前给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求有些不同 有客户要求以新闻的形式发布 有客户要求以博客的形式发布 有客户要求以微信公众号的形式发布 【 传统方式】 直接复制

    2024年02月15日
    浏览(51)
  • 享元模式 Flyweight Pattern 《游戏编程模式》学习笔记

    如果我们要存储一个树一样的数据结构,直觉来说我们会这么写 但是实际上我们会发现,哪怕森林里有千千万万的树,它们大多数长得一模一样。 它们使用了相同的网格和纹理。 这意味着这些树的实例的大部分字段是一样的。 那么我们就可以将树共有的数据拿出来分离到另

    2024年02月13日
    浏览(47)
  • 设计模式——享元模式

    享元模式(Flyweight Pattern)是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优点 可以大大减少应用程序创建对象的数量,降低程序内存占用。 缺点 提高了系统的复杂度,需要分离出享元对象的外部状态(key)和内部状态(对象属性),并且外部

    2024年02月16日
    浏览(39)
  • 设计模式:享元模式

    首先我们需要简单了解一下什么是享元模式。 享元模式(Flyweight Pattern) :主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式的重点就在这个享字,通过一些共享技术来减少对象的创建,实际上Java中String值的存储,Volley中的 ByteArrayPool 也使用到了享元模式,

    2024年02月08日
    浏览(44)
  • 设计模式-享元模式

    享元模式(Flyweight Pattern)是一种结构型设计模式,主要用于减少创建大量相似对象对内存资源的消耗,通过共享这些对象来提高程序性能和系统资源利用率。在实际应用场景中string就是使用了享元模式,string a = “123”; string b = “123”; 我们假设有一个场景是需要创建大量的

    2024年01月24日
    浏览(42)
  • 设计模式(22)享元模式

    一、介绍: 1、定义:享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 2、组成结构: (1)Flyweight(抽象享元类):通常是一个接口或

    2024年02月07日
    浏览(42)
  • 【23种设计模式】享元模式【⭐】

    个人主页 :金鳞踏雨 个人简介 :大家好,我是 金鳞 ,一个初出茅庐的Java小白 目前状况 :22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客 :这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进

    2024年02月09日
    浏览(47)
  • Java设计模式-享元模式

    在Java领域的软件开发中,设计模式是提高代码可维护性和可扩展性的重要工具。其中,享元模式是一种被广泛使用的设计模式,它通过优化对象的重用来提升系统性能。 享元模式是一种结构型设计模式,旨在通过共享对象来减少系统中的对象数量,从而提升性能和减少内存

    2024年02月06日
    浏览(38)
  • 【前端设计模式】之享元模式

    享元模式是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。在前端开发中,享元模式可以用于优化大量相似对象的创建和管理,从而提高页面的加载速度和用户体验。 共享对象:享元模式通过共享相似对象来减少内存使用。相似对象可以共享一些不变的状

    2024年02月08日
    浏览(48)
  • js设计模式:享元模式

    当需要处理很多非常类似操作的时候,可以创建可以共享的对象,并暴露接口供其他对象调用 这个对象内包含这些操作的处理逻辑,可以优化性能  

    2024年02月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包