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
十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》