享元模式-结构型
享元模式
模式所涉及的角色
Flyweight: 享元接口,通过这个接口传入外部状态并作用于外部状态;
ConcreteFlyweight: 具体的享元实现对象,必须是可共享的,需要封装享元对象的内部状态;
UnsharedConcreteFlyweight: 非共享的享元实现对象,并不是所有的享元对象都可以共享,非共享的享元对象通常是享元对象的组合对象;
FlyweightFactory: 享元工厂,主要用来创建并管理共享的享元对象,并对外提供访问共享享元的接口;
这里列举非上图继承关系但是容易理解
//棋子享元类 棋子的相同的属性对象。
public class ChessUnit {
public int id;
public String color;
public String chessName;
public ChessUnit (int id, String color, String chessName) {
this.id = id;
this.color = color;
this.chessName = chessName;
}
}
//真正的棋子类 带有坐标
public class Chess {
private ChessUnit chessUnit;
private int x;
private int y;
public Chess(ChessUnit chessUnit, int x, int y){
this.chessUnit = chessUnit;
this.x = x;
this.y = y;
}
}
//提供一个工厂类,保存不变的那些固定的不变的要被共享的享元对象,用静态对象保存
public class ChessUnitFactory {
private static final Map<Integer, ChessUnit> chesses = new HashMap<Integer, ChessUnit>();
static {
chesses.put(1, new ChessUnit(1, "red", "马"));
chesses.put(2, new ChessUnit(1, "red", "将"));
chesses.put(3, new ChessUnit(1, "red", "士"));
chesses.put(4, new ChessUnit(1, "red", "象"));
}
public static ChessUnit getChessByid(int chessId){
return chesses.get(chessId);
}
}
//一个棋盘类,在构造方法中调用init方法,利用保存好的静态变量来初始化对象,节约内存空间。
public class ChessBoard {
private Map<Integer, Chess> chessBoard = new HashMap<Integer, Chess>();
public ChessBoard(){
init();
}
public void init() {
chessBoard.put(1, new Chess(ChessUnitFactory.getChessByid(1),123,32));
chessBoard.put(2, new Chess(ChessUnitFactory.getChessByid(2),123,32));
chessBoard.put(3, new Chess(ChessUnitFactory.getChessByid(3),123,32));
chessBoard.put(4, new Chess(ChessUnitFactory.getChessByid(4),123,32));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现