设计模式-享元模式

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

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

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

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

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

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

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

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

// 具体享元类
class Circle implements Shape {
	private String color;

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

	@Override
	public void draw() {
		System.out.println("Drawing a circle with color: " + color);
	}
}

// 享元工厂类
class ShapeFactory {
	private static final Map circleMap = new HashMap<>();

	public static Shape getCircle(String color) {
		Circle circle = (Circle) circleMap.get(color);

		if (circle == null) {
			circle = new Circle(color);
			circleMap.put(color, circle);
			System.out.println("Creating a new circle with color: " + color);
		}

		return circle;
	}
}
// 客户端
public class Main {
	private static final String[] colors = {"Red", "Green", "Blue"};

	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			Circle circle = (Circle) ShapeFactory.getCircle(getRandomColor());
			circle.draw();
		}
	}

	private static String getRandomColor() {
		return colors[(int) (Math.random() * colors.length)];
	}
}

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

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

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

你可能感兴趣的:(设计模式,设计模式,享元模式)