当前位置: 首页 > article >正文

TypeScript 设计模式之【享元模式】

文章目录

  • 享元模式:优化资源使用的利器
  • 享元模式的秘密
    • 享元模式有什么利与害?
    • 如何使用享元模式来优化你的系统
    • 代码实现案例
    • 享元模式的主要优点
    • 享元模式的主要缺点
    • 享元模式的适用场景
    • 总结

在这里插入图片描述

享元模式:优化资源使用的利器

在开发项目中,假如你的系统中有大量相似的对象,导致内存占用过高,性能下降。这时候,你会希望有一种方法,能够共享这些相似对象的公共部分,从而减少内存的使用,提高系统的性能。

例如你在开发一个图形应用程序,里面有很多相似的图形对象,如圆形、方形等。每个图形对象都有相同的颜色、大小等属性。享元模式就像是一个共享池,能够帮你共享这些相似对象的公共部分,从而优化资源的使用!

享元模式的秘密

享元模式就像是给你的系统加上了一层"共享池",它提供了一种方法,来共享相似对象的公共部分。通过这个共享池,你可以减少内存的使用,提高系统的性能,而不需要创建大量相似的对象。

享元模式有什么利与害?

享元模式的优点是可以减少内存的使用,提高系统的性能,它遵循单一职责原则和开闭原则,对扩展开放,对修改关闭。缺点是实现复杂,可能会增加系统的复杂性。

如何使用享元模式来优化你的系统

享元涉及角色

  • 享元(Flyweight):定义相似对象的公共部分
  • 具体享元(ConcreteFlyweight):实现享元接口,并添加具体的状态
  • 享元工厂(FlyweightFactory):创建和管理享元对象

享元步骤

  1. 创建一个享元接口,定义相似对象的公共部分
  2. 创建具体享元类,实现享元接口,并添加具体的状态
  3. 创建享元工厂类,创建和管理享元对象
  4. 使用享元工厂类,来共享相似对象的公共部分

选择合适的享元模式,你就能轻松地优化资源的使用,让系统变得更加高效和灵活!

代码实现案例

// 享元接口
interface Shape {
  draw(): void;
}

// 具体享元类 - 圆形
class Circle implements Shape {
  private color: string;
  private radius: number;

  constructor(color: string) {
    this.color = color;
  }
  // 设置半径
  setRadius(radius: number): void {
    this.radius = radius;
  }
  // 绘制圆形
  draw(): void {
    console.log(`绘制一个${this.color}的圆形,半径为${this.radius}`);
  }
}

// 享元工厂类
class ShapeFactory {
  private static circleMap: Map<string, Circle> = new Map();
  // 获取圆形
  static getCircle(color: string): Circle {
    let circle = this.circleMap.get(color);

    if (!circle) {
      circle = new Circle(color);
      this.circleMap.set(color, circle);
      console.log(`创建一个${color}的圆形`);
    }

    return circle;
  }
}

// 红色圆形
const redCircle = ShapeFactory.getCircle("红色");
redCircle.setRadius(10);
redCircle.draw(); // 输出: 创建一个红色的圆形, 绘制一个红色的圆形,半径为10

// 蓝色圆形
const blueCircle = ShapeFactory.getCircle("蓝色");
blueCircle.setRadius(20);
blueCircle.draw(); // 输出: 创建一个蓝色的圆形, 绘制一个蓝色的圆形,半径为20

在这里插入图片描述

享元模式的主要优点

  1. 减少内存的使用:通过共享相似对象的公共部分,减少内存的使用
  2. 提高系统的性能:减少对象的创建,提高系统的性能
  3. 遵循单一职责原则:享元类只负责定义相似对象的公共部分,不涉及具体的状态
  4. 遵循开闭原则:可以在不修改现有代码的情况下,扩展系统的功能

享元模式的主要缺点

  1. 实现复杂:享元模式的实现较为复杂,可能会增加系统的复杂性
  2. 可能会导致代码的可读性下降:由于共享了相似对象的公共部分,可能会导致代码的可读性下降

享元模式的适用场景

  1. 需要减少内存的使用:通过共享相似对象的公共部分,减少内存的使用
  2. 希望提高系统的性能:减少对象的创建,提高系统的性能
  3. 系统中有大量相似的对象:通过享元模式,统一管理这些相似的对象

总结

享元模式是一种结构型设计模式,它通过共享相似对象的公共部分,来减少内存的使用,提高系统的性能。享元模式在不修改现有系统的情况下,优化了资源的使用,提高了系统的性能。合理使用享元模式,可以让你的代码更加高效,更易于维护和扩展。

喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!

下期预告:TypeScript 设计模式之【代理模式】


http://www.kler.cn/a/320397.html

相关文章:

  • 计算机网络-MSTP基础实验一(单域多实例)
  • 每日一练 | 包过滤防火墙的工作原理
  • 网关在能源物联网中扮演了什么角色?
  • 基于多模板配准的心腔分割算法
  • 安全、便捷、效率高,明达边缘计算网关助力制药装备企业远程调机
  • 大语言模型通用能力排行榜(2024年11月8日更新)
  • django项目添加测试数据的三种方式
  • 机器人时代的“触觉革命”:一块小传感器如何颠覆你的认知?
  • 2024最新Python Debugger工具pdb的用法(深度学习项目),了解输入输出的形状大小
  • 【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举)
  • Excel 设置自动换行
  • Qt C++设计模式->组合模式
  • 25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)
  • 神经网络(四):UNet图像分割网络
  • iOS 消息机制详解
  • 三光吊舱详解!
  • IT技术之电脑黑屏处理
  • 183天打造行业新标杆!BOE(京东方)国内首条第8.6代AMOLED生产线提前全面封顶
  • Java-多线程-锁
  • vue props 接收函数 function
  • 在模板字符串中不能使用element-ui组件
  • 【机器学习】ROC曲线
  • AtCoder Beginner Contest 372
  • 抓机遇,促发展——2025第十二届广州国际汽车零部件加工技术及汽车模具展览会
  • MySQL的基础用法一
  • 【论文阅读】视觉里程计攻击