软件设计 享元模式 Flyweight Pattern
大家都知道围棋有黑白子,用程序定义一局围棋时,如果给每颗黑子和每颗白子都定义一个对象,那一局围棋会产生大量的对象,这样有必要吗?每颗黑子都是类似的,每颗白子也是类似的,完全可以只定义一颗黑子对象和一颗白子对象,其余的棋子都复用这两个对象,这样不仅节省空间,编写也会简单很多,这就是享元模式的思想。
它通过与其他类似对象共享数据来减小内存占用,也就是它名字的来由:享-分享
代码实现:
这里以下围棋为例介绍享元模式:
1、定义棋子(抽象享元角色)
/**
* 棋子
*/
public interface Piece {
/**
* 落子
*/
public void fall();
}
2、定义具体棋子(具体享元角色)
/**
* 具体棋子
*/
public class PieceImpl implements Piece{
/**
* 棋子
*/
private String piece;
/**
* 构造棋子
* @param color 棋子颜色
*/
public PieceImpl(String color) {
this.piece = color;
}