Java学设计模式之享元模式

一、享元模式概念

1.1 什么是享元模式

享元模式是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。在享元模式中,对象被设计成可共享的,以便在需要时能够被多个不同的上下文使用。

结构

享元模式通常包含以下几个要素:

  1. Flyweight(享元): 定义了共享对象的接口,包含了需要被共享的状态。通过这些接口,享元对象可以接受并作用于外部状态。

  2. ConcreteFlyweight(具体享元): 实现了享元接口,表示可被共享的具体对象。具体享元对象中包含了内部状态,而外部状态则由客户端在使用时传递给享元对象。

  3. UnsharedConcreteFlyweight(非共享具体享元): 不可被共享的具体对象,通常是一些不可复用的对象,其中包含了不适合被共享的状态。

  4. FlyweightFactory(享元工厂): 负责创建和管理享元对象。当客户端请求一个享元对象时,享元工厂负责检查是否已经有相应的享元对象存在,如果存在则返回已有的对象,如果不存在则创建一个新的享元对象并将其加入到享元池中。

  5. 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 中国大陆许可协议进行许可。

posted @   启航黑珍珠号  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起