gpt4 book ai didi

java - 结合工厂方法和单例设计模式

转载 作者:行者123 更新时间:2023-11-30 06:44:29 25 4
gpt4 key购买 nike

我目前正在实现一个游戏,其中有不同类型的 map 。作为所有 map ,它们自然共享某些属性和方法,因此抽象类 Map创建后,然后按映射进行子类化,例如 SafeMap , HazardousMap , WeirdMap

为了方便将来添加更多 map ,使用了工厂方法设计模式。所以程序包含 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 实例(无论选择哪个子类)。我读过,解决此问题的最佳方法是部署单例设计模式,其中静态实例在类内私有(private)声明,并且构造函数也设为私有(private)。但我不知道如何结合工厂方法设计模式来完成此操作,因为我们有多个子类和 getInstance()必须在一个具体的类中。

感谢您的帮助。


注意:我看过a few similar questions但我认为对这些的回应与我的案例无关。

最佳答案

最简单的方法是使用单个静态字段,如果已创建 map 则返回该值。

代码未经测试,但我认为这个概念很简单:

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 - 结合工厂方法和单例设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com