• 设计模式-享元模式


            享元模式(Flyweight Pattern)是一种设计模式,用于减少对象的内存使用和提高性能。它通过共享对象来减少内存中相似对象的数量。

            在Java中,享元模式可以通过以下方式实现:

            1. 创建一个接口(Flyweight),定义了享元对象的共同行为。

            2. 创建一个具体的享元类(ConcreteFlyweight),实现了接口,并包含内部状态和外部状态。内部状态是可以共享的,而外部状态是不可共享的。

            3. 创建一个享元工厂类(FlyweightFactory),用于管理和创建享元对象。它维护一个享元对象的池,以便在需要时返回已经创建的享元对象。

            以下是一个简单的示例代码,演示了如何使用享元模式:

    1. import java.util.HashMap;
    2. import java.util.Map;
    3. // 接口
    4. interface Shape {
    5. void draw();
    6. }
    7. // 具体享元类
    8. class Circle implements Shape {
    9. private String color;
    10. public Circle(String color) {
    11. this.color = color;
    12. }
    13. @Override
    14. public void draw() {
    15. System.out.println("Drawing a circle with color: " + color);
    16. }
    17. }
    18. // 享元工厂类
    19. class ShapeFactory {
    20. private static final Map<String, Shape> circleMap = new HashMap<>();
    21. public static Shape getCircle(String color) {
    22. Circle circle = (Circle) circleMap.get(color);
    23. if (circle == null) {
    24. circle = new Circle(color);
    25. circleMap.put(color, circle);
    26. System.out.println("Creating a new circle with color: " + color);
    27. }
    28. return circle;
    29. }
    30. }
    31. // 客户端
    32. public class Main {
    33. private static final String[] colors = {"Red", "Green", "Blue"};
    34. public static void main(String[] args) {
    35. for (int i = 0; i < 10; i++) {
    36. Circle circle = (Circle) ShapeFactory.getCircle(getRandomColor());
    37. circle.draw();
    38. }
    39. }
    40. private static String getRandomColor() {
    41. return colors[(int) (Math.random() * colors.length)];
    42. }
    43. }

            在这个示例中,Shape接口定义了享元对象的共同行为。Circle类是具体的享元类,实现了Shape接口,并包含内部状态(color)和外部状态(无)。ShapeFactory类是享元工厂类,用于管理和创建享元对象。它维护一个circleMap来存储已经创建的享元对象,并在需要时返回已经创建的对象。

            在客户端中,通过调用ShapeFactory的getCircle方法来获取享元对象。如果对象已经存在于circleMap中,则直接返回已有的对象;否则,创建一个新的对象并将其添加到circleMap中。

            享元模式通过共享相似对象来减少内存使用和提高性能。它适用于需要创建大量相似对象的场景,可以显著减少内存占用和对象创建的开销。

  • 相关阅读:
    好书推荐之Mysql三剑客 :《高性能Mysql》、《Mysql技术内幕》、《数据库索引设计与优化》
    steam搬砖项目,csgo游戏搬砖熟练操作后,可以月入过万~
    Windows自带虚拟机的使用方法
    deepstream·在python中安装pyds包
    MySQL性能优化-Mysql索引篇(3)
    从零开始学习软件测试-第47天笔记
    基于Qt 多线程(继承 QObject 的线程)
    inference.py篇
    为什么 CSS flex 布局中没有 `justify-items` 和 `justify-self`?
    vue 实现弹出菜单,解决鼠标点击其他区域的检测问题
  • 原文地址:https://blog.csdn.net/m0_65014849/article/details/133942125