12r*_*rad 5 java singleton design-patterns factory
我有共同的代码(我称之为控制器的多个类)需要由项目中的多个包共享.我正在考虑创建一个返回这些控制器的工厂.因此,工厂将有一个hashmap,可以返回请求的控制器,如果没有创建,则创建一个新的.控制器有公共代码,因为我不需要创建这些控制器的多个实例,我认为它们应该是单例.
这看起来像是一个好方法吗?
Nar*_*hai 11
我认为你需要的是Multiton模式.
multiton模式是一种类似于singleton的设计模式,它只允许创建一个类的一个实例.多元模式扩展了单例概念,以将命名实例的映射作为键值对进行管理.而不是每个应用程序有一个实例(例如Java编程语言中的java.lang.Runtime对象),而是确保每个键的单个实例.
public class FooMultiton {
private static final Map<Object, FooMultiton> instances = new HashMap<Object, FooMultiton>();
private FooMultiton() {
// no explicit implementation
}
public static synchronized FooMultiton getInstance(Object key) {
// Our "per key" singleton
FooMultiton instance = instances.get(key);
if (instance == null) {
// Lazily create instance
instance = new FooMultiton();
// Add it to map
instances.put(key, instance);
}
return instance;
}
// other fields and methods ...
}
Run Code Online (Sandbox Code Playgroud)
控制器有公共代码,因为我不需要创建这些控制器的多个实例,我认为它们应该是单例.
您需要单个实例并不一定意味着您需要Singleton模式.您可以拥有一个实例,并在后续调用时传递该实例.不一定使用private构造函数强制执行单一性.
另请阅读Evil Singletons,了解更多关于单身人士的不足之处.看完之后,如果你仍然觉得你需要Singleton,那就去吧.