
Java享元模式是常用的Java设计模式,下面我重点详解Java享元模式的角色实现与应用场景@mikechen
Java享元模式定义
Java享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和对象创建的数量。
享元模式的主要思想是:对于大量相似的对象,只创建一次,并在需要时共享使用。
通过共享对象,可以减少内存使用和对象创建的数量,从而提高系统的性能和效率。
Java享元模式应用场景
Java享元模式适用于:当需要创建大量相似的对象时,使用享元模式可以减少内存使用和对象创建的数量,提高系统性能和效率。
Java享元模式的应用场景,主要包含如下4类:
- 文字编辑器:当需要在文本编辑器中创建大量相似的字母或数字时,可以使用享元模式来共享相同的字母或数字对象,减少内存使用和对象创建的数量。
- 游戏中的角色:当需要在游戏中创建大量相似的角色时,可以使用享元模式来共享相同的角色对象,减少内存使用和对象创建的数量。
- Web应用中的缓存:当需要在Web应用中缓存大量相似的对象时,可以使用享元模式来共享相同的对象,减少内存使用和对象创建的数量。
- 数据库连接池:当需要在应用中管理大量数据库连接时,可以使用享元模式来共享相同的连接对象,减少内存使用和连接创建的数量。
Java中享元模式角色
Java中享元模式的主要角色,如下图所示:

主要包含4大角色:
- 享元接口(Flyweight):定义了可以被共享的方法,通常是一个接口或抽象类。
- 具体享元类(ConcreteFlyweight):实现享元接口,包含内部状态。内部状态在享元对象创建后就不会再改变。
- 享元工厂类(FlyweightFactory):负责创建和管理享元对象,保证享元对象的共享和复用。
- 客户端(Client):使用享元工厂来获取享元对象,并传递需要的外部状态。外部状态在客户端使用享元对象时传递,不会被共享。
Java享元模式实现例子
在Java中实现享元模式实现,需要以下几个步骤:
- 定义享元接口(Flyweight),包括可以被共享的方法(如操作共享对象的方法)。
- 创建享元类(ConcreteFlyweight),实现享元接口,并包含内部状态。
- 创建享元工厂类(FlyweightFactory),用于管理享元对象的创建和共享。
- 在客户端代码中,使用享元工厂来获取享元对象,并传递需要的外部状态。
详细使用示例,如下:
// 享元接口
public interface Shape {
void draw();
}
// 具体享元类
public class Circle implements Shape {
private String color;
public Circle(String color) {
this.color = color;
}
@Override
public void draw() {
System.out.println("Drawing a " + color + " circle.");
}
}
// 享元工厂类
public class ShapeFactory {
private static final Map<String, Shape> shapes = new HashMap<>();
public static Shape getCircle(String color) {
Circle circle = (Circle)shapes.get(color);
if (circle == null) {
circle = new Circle(color);
shapes.put(color, circle);
System.out.println("Creating a new " + color + " circle.");
} else {
System.out.println("Reusing existing " + color + " circle.");
}
return circle;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Shape redCircle = ShapeFactory.getCircle("red");
redCircle.draw();
Shape blueCircle = ShapeFactory.getCircle("blue");
blueCircle.draw();
Shape greenCircle = ShapeFactory.getCircle("green");
greenCircle.draw();
Shape redCircle2 = ShapeFactory.getCircle("red");
redCircle2.draw();
}
}
在上面的代码中:
- Circle类是享元类,用于维护圆的内部状态(颜色);
- ShapeFactory是享元工厂类,用于创建和管理共享的Circle对象;
- 在客户端代码中,使用ShapeFactory来获取Circle对象,并传递需要的外部状态(颜色);
- 通过共享Circle对象,可以减少内存使用和对象创建的数量。
以上就是Java享元模式详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。