标签搜索

目 录CONTENT

文章目录

Java编写一个享元模式的例子

沙漠渔
2023-09-13 22:59:17 / 0 评论 / 0 点赞 / 152 阅读 / 1,545 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-09-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少对象的数量以节省内存和提高性能。这通过共享可能在多个上下文中重复使用的相似对象来实现。下面是一个简单的Java享元模式的例子,假设我们要创建并管理不同颜色的圆形对象,但如果颜色相同,则应共享同一个圆形对象。

首先,我们需要创建享元接口,它定义了可以共享的圆形对象的方法:

public interface Shape {
    void draw();
}

然后,我们创建具体的享元类 Circle 实现 Shape 接口,并包含一个颜色属性和用于绘制的方法:

public class Circle implements Shape {
    private String color;

    public Circle(String color) {
        this.color = color;
    }

    @Override
    public void draw() {
        System.out.println("画一个 " + color + " 圆形");
    }
}

接下来,我们创建一个工厂类 ShapeFactory 来管理和获取享元对象。该工厂类使用一个 Map 来存储已创建的圆形对象,以确保相同颜色的圆形对象只被创建一次:

import java.util.HashMap;
import java.util.Map;

public class ShapeFactory {
    private static final Map<String, Shape> circleMap = new HashMap<>();

    public static Shape getCircle(String color) {
        // 先查看是否已经有相同颜色的圆形对象
        Shape circle = circleMap.get(color);

        if (circle == null) {
            // 如果没有,则创建一个新的圆形对象,并放入Map中
            circle = new Circle(color);
            circleMap.put(color, circle);
            System.out.println("创建一个 " + color + " 圆形对象");
        }

        return circle;
    }
}

最后,我们可以使用 ShapeFactory 来获取共享的圆形对象并绘制它们:

public class Main {
    public static void main(String[] args) {
        String[] colors = { "红色", "绿色", "蓝色", "红色", "绿色" };

        for (String color : colors) {
            Shape circle = ShapeFactory.getCircle(color);
            circle.draw();
        }
    }
}

在这个示例中,当创建圆形对象时,首先检查是否已经存在相同颜色的圆形对象。如果存在,则返回现有的对象,否则创建一个新的圆形对象并存储在 circleMap 中。这样,相同颜色的圆形对象将被共享,以减少内存消耗。

0
广告 广告

评论区