享元模式(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 中。这样,相同颜色的圆形对象将被共享,以减少内存消耗。
评论区