java - 结合工厂方法和单例设计模式
问题描述
我目前正在实现一个游戏,其中有不同类型的地图。作为所有映射,它们自然共享某些属性和方法,因此创建了一个抽象类Map
,然后由映射子类,例如SafeMap
, HazardousMap
,WeirdMap
等。
为了方便以后添加更多地图,使用了工厂方法设计模式。所以程序包含一个MapCreator
类,其代码如下所示:
public class MapCreator{
public Map createMap(char mapType){
switch(mapType){
case 'S':
return new SafeMap();
case 'H':
return new HazardousMap();
case 'W':
return new WeirdMap();
default:
return null;
}
}
}
现在我还想强制只存在一个 Map 实例(不管选择的子类)。我已经读过,解决此问题的最佳方法是部署单例设计模式,其中静态实例在类中私有声明,并且构造函数也设为私有。但是我不知道如何结合工厂方法设计模式来完成,因为我们有多个子类并且getInstance()
必须在一个具体的类中。
我感谢任何帮助。
注意:我看过一些类似的问题,但我认为对这些问题的回答与我的情况无关。
解决方案
最简单的方法是使用单个静态字段,如果已创建地图,则返回该值。
代码未经测试,但我认为这个概念很简单:
public class MapCreator{
private static Map theOnlyMap;
public synchronized Map createMap(char mapType){
if( theOnlyMap != null ) return theOnlyMap;
switch(mapType){
case 'S':
theOnlyMap = new SafeMap();
break;
case 'H':
theOnlyMap = new HazardousMap();
break;
case 'W':
theOnlyMap = new WeirdMap();
break;
}
return theOnlyMap;
}
}
推荐阅读
- java - android studio调色板所有图标都相同
- python - 用于在 Python 中匹配具有相似 ID 字符串的两个集合的分类器
- python - 使用 `python setup.py develop` 安装更多文件
- hadoop - FairSchduler 中瞬时公平份额的用途是什么?
- java - 如何在不检查同一事物的情况下检查一个数组中的值是否相等
- python - 如何在 python 中使用 x-api-key、accesskey 和 securityKey 通过 endponint api 从 aws dynamodb 发布或获取数据
- php - 正则表达式在 html 中查找特定表
- python - 此检查检测到无法正常访问的代码
- android - Android错误在夜间模式下加载错误的颜色
- c# - 如何查找数组中出现超过阈值的所有连续元素的索引