Java学设计模式之享元模式
一、享元模式概念
1.1 什么是享元模式
享元模式是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。在享元模式中,对象被设计成可共享的,以便在需要时能够被多个不同的上下文使用。
结构
享元模式通常包含以下几个要素:
-
Flyweight(享元): 定义了共享对象的接口,包含了需要被共享的状态。通过这些接口,享元对象可以接受并作用于外部状态。
-
ConcreteFlyweight(具体享元): 实现了享元接口,表示可被共享的具体对象。具体享元对象中包含了内部状态,而外部状态则由客户端在使用时传递给享元对象。
-
UnsharedConcreteFlyweight(非共享具体享元): 不可被共享的具体对象,通常是一些不可复用的对象,其中包含了不适合被共享的状态。
-
FlyweightFactory(享元工厂): 负责创建和管理享元对象。当客户端请求一个享元对象时,享元工厂负责检查是否已经有相应的享元对象存在,如果存在则返回已有的对象,如果不存在则创建一个新的享元对象并将其加入到享元池中。
-
Client(客户端): 使用享元模式的客户端。客户端通常会维护一些外部状态,并在需要时将这些状态传递给享元对象。
二、享元模式代码
2.1 享元
public interface ChessPiece { void display(String position); }
2.2 具体享元
public class ConcreteChessPiece implements ChessPiece { private String color; public ConcreteChessPiece(String color) { this.color = color; } @Override public void display(String position) { System.out.println("Chess piece color: " + color + ", position: " + position); } }
2.3 享元工厂
public class ChessPieceFactory { private Map<String, ChessPiece> pieces = new HashMap<>(); public ChessPiece getChessPiece(String color) { if (!pieces.containsKey(color)) { pieces.put(color, new ConcreteChessPiece(color)); } return pieces.get(color); } }
2.4 测试类
public class FlyweightPatternTest { public static void main(String[] args) { ChessPieceFactory factory = new ChessPieceFactory(); ChessPiece whitePawn1 = factory.getChessPiece("white"); whitePawn1.display("a2"); ChessPiece whitePawn2 = factory.getChessPiece("white"); whitePawn2.display("b2"); ChessPiece blackPawn = factory.getChessPiece("black"); blackPawn.display("a7"); } }
三、总结
享元模式的优点包括:
- 大大减少了对象的数量,节省了内存空间。
- 提高了系统的性能,因为共享对象可以被多个客户端同时使用。
缺点包括:
- 需要对外部状态进行管理,可能会增加系统的复杂性。
- 共享对象的状态改变可能会影响到其他使用该对象的客户端。
本文作者:启航黑珍珠号
本文链接:https://www.cnblogs.com/Linzj5950/p/18183540
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步