《设计模式之美》享元模式(上):如何利用享元模式优化文本编辑器的内存占用?

本文介绍了享元模式的概念和作用,通过实例展示了如何利用享元模式优化文本编辑器和棋牌游戏的内存占用。享元模式通过复用不可变对象,减少相似对象的创建,从而节省内存。文章对比了享元模式与单例、缓存、对象池的区别,强调了设计模式在节省空间和提高效率方面的不同考量。
摘要由CSDN通过智能技术生成

王争《设计模式之美》学习笔记

享元模式原理与实现

  • 所谓“享元”,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。
  • 不仅仅相同对象可以设计成享元,对于相似对象,我们也可以将这些对象中相同的部分(字段)提取出来,设计成享元,让这些大量相似对象引用这些享元。
  • 定义中的“不可变对象”指的是,一旦通过构造函数初始化完成之后,它的状态(对象的成员变量或者属性)就不会再被修改了。

文中举例

  • 假设我们在开发一个棋牌游戏(比如象棋):
    • 一个游戏厅中有成千上万个“房间”,每个房间对应一个棋局。
    • 棋局要保存每个棋子的数据,比如:棋子类型(将、相、士、炮等)、棋子颜色(红方、黑方)、棋子在棋局中的位置。
    • 利用这些数据,我们就能显示一个完整的棋盘给玩家。
public class ChessPiece {
   //棋子
  private int id;
  private String text;
  private Color color;
  private int positionX;
  private int positionY;
  public ChessPiece(int id, String text, Color color, int positionX, int positionY) {
   
    this.id = id;
    this.text = text;
    this.color = color;
    this.positionX = positionX;
    this.positionY = positionX;
  }
  public static enum Color {
   
    RED, BLACK
  }
  // ...省略其他属性和getter/setter方法...
}

public class ChessBoard {
   //棋局
  private Map<Integer, ChessPiece> chessPieces = new HashMap<>();
  public ChessBoard() {
   
    init();
  }
  private void init() {
   
    chessPieces.put(1, new ChessPiece(1, "車", ChessPiece.Color.BLACK, 0, 0));
    chessPieces.put(2, new ChessPiece(2,"馬", ChessPiece.Color.BLACK, 0, 1));
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值