单例多态
Singleton Polymorphism
让我们假设我有一个由双维单元格阵列组成的棋盘单例表示。有时我希望将该表示视为行板,有时作为列,有时作为网格,但每种情况都必须在相同的底层单例板
上工作
所以我有 4 个 class 需要实施:
class CheesBoard : singleton consist of just a stright dd array of cells
class CheesBoardAsGrids : consist of that same cells but presented by grids
class CheesBoardAsRows : strigtforward as above but rows
class CheesBoardAsColumns : ... you already get it
而且我不知道它们之间应该有什么样的关系才能使它最具可读性和可重用性
例如:我不能从 CheesBoard 继承,因为它是单例的
根据定义,单例是您希望实例化不超过一次的对象。
您可以创建摘要 class 板。 classes CheesBoardAsGrids
、CheesBoardAsRows
和 CheesBoardAsColumns
将继承自此 class。
CheesBoard class 应该包含 Board 变量。
如果你想用一些数据初始化你的单例,你可以在 getInstance 方法之后用数据加载它。
CheesBoard class 应该包含 init 方法。此方法将获取 Board 参数并初始化 Board 变量:
Board board = new CheesBoardAsGrids();
CheesBoard singleton = CheesBoard.getInstance();
singleton.init(board);
让我们假设我有一个由双维单元格阵列组成的棋盘单例表示。有时我希望将该表示视为行板,有时作为列,有时作为网格,但每种情况都必须在相同的底层单例板
上工作所以我有 4 个 class 需要实施:
class CheesBoard : singleton consist of just a stright dd array of cells
class CheesBoardAsGrids : consist of that same cells but presented by grids
class CheesBoardAsRows : strigtforward as above but rows
class CheesBoardAsColumns : ... you already get it
而且我不知道它们之间应该有什么样的关系才能使它最具可读性和可重用性
例如:我不能从 CheesBoard 继承,因为它是单例的
根据定义,单例是您希望实例化不超过一次的对象。
您可以创建摘要 class 板。 classes CheesBoardAsGrids
、CheesBoardAsRows
和 CheesBoardAsColumns
将继承自此 class。
CheesBoard class 应该包含 Board 变量。
如果你想用一些数据初始化你的单例,你可以在 getInstance 方法之后用数据加载它。
CheesBoard class 应该包含 init 方法。此方法将获取 Board 参数并初始化 Board 变量:
Board board = new CheesBoardAsGrids();
CheesBoard singleton = CheesBoard.getInstance();
singleton.init(board);