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

农民  论坛元老 | 2024-9-26 14:30:21 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1562|帖子 1562|积分 4686


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

在开发项目中,假如你的系统中有大量相似的对象,导致内存占用过高,性能下降。这时候,你会希望有一种方法,能够共享这些相似对象的公共部分,从而减少内存的利用,提高系统的性能。
例如你在开发一个图形应用程序,里面有很多相似的图形对象,如圆形、方形等。每个图形对象都有相同的颜色、大小等属性。享元模式就像是一个共享池,能够帮你共享这些相似对象的公共部分,从而优化资源的利用!
享元模式的秘密

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

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

   享元涉及角色
  

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

  • 创建一个享元接口,定义相似对象的公共部分
  • 创建具体享元类,实现享元接口,并添加具体的状态
  • 创建享元工厂类,创建和管理享元对象
  • 利用享元工厂类,来共享相似对象的公共部分
选择合适的享元模式,你就能轻松地优化资源的利用,让系统变得更加高效和灵活!
代码实现案例

  1. // 享元接口
  2. interface Shape {
  3.   draw(): void;
  4. }
  5. // 具体享元类 - 圆形
  6. class Circle implements Shape {
  7.   private color: string;
  8.   private radius: number;
  9.   constructor(color: string) {
  10.     this.color = color;
  11.   }
  12.   // 设置半径
  13.   setRadius(radius: number): void {
  14.     this.radius = radius;
  15.   }
  16.   // 绘制圆形
  17.   draw(): void {
  18.     console.log(`绘制一个${this.color}的圆形,半径为${this.radius}`);
  19.   }
  20. }
  21. // 享元工厂类
  22. class ShapeFactory {
  23.   private static circleMap: Map<string, Circle> = new Map();
  24.   // 获取圆形
  25.   static getCircle(color: string): Circle {
  26.     let circle = this.circleMap.get(color);
  27.     if (!circle) {
  28.       circle = new Circle(color);
  29.       this.circleMap.set(color, circle);
  30.       console.log(`创建一个${color}的圆形`);
  31.     }
  32.     return circle;
  33.   }
  34. }
  35. // 红色圆形
  36. const redCircle = ShapeFactory.getCircle("红色");
  37. redCircle.setRadius(10);
  38. redCircle.draw(); // 输出: 创建一个红色的圆形, 绘制一个红色的圆形,半径为10
  39. // 蓝色圆形
  40. const blueCircle = ShapeFactory.getCircle("蓝色");
  41. blueCircle.setRadius(20);
  42. blueCircle.draw(); // 输出: 创建一个蓝色的圆形, 绘制一个蓝色的圆形,半径为20
复制代码

享元模式的重要优点


  • 减少内存的利用:通过共享相似对象的公共部分,减少内存的利用
  • 提高系统的性能:减少对象的创建,提高系统的性能
  • 遵循单一职责原则:享元类只负责定义相似对象的公共部分,不涉及具体的状态
  • 遵循开闭原则:可以在不修改现有代码的环境下,扩展系统的功能
享元模式的重要缺点


  • 实现复杂:享元模式的实现较为复杂,大概会增加系统的复杂性
  • 大概会导致代码的可读性下降:由于共享了相似对象的公共部分,大概会导致代码的可读性下降
享元模式的适用场景


  • 必要减少内存的利用:通过共享相似对象的公共部分,减少内存的利用
  • 希望提高系统的性能:减少对象的创建,提高系统的性能
  • 系统中有大量相似的对象:通过享元模式,统一管理这些相似的对象
总结

享元模式是一种结构型设计模式,它通过共享相似对象的公共部分,来减少内存的利用,提高系统的性能。享元模式在不修改现有系统的环境下,优化了资源的利用,提高了系统的性能。合理利用享元模式,可以让你的代码更加高效,更易于维护和扩展。
喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!
下期预告:TypeScript 设计模式之【署理模式】

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表