在应用程序范围内使用对象很常见。 通过应用程序共享对象有哪些不同的模式/模型/方法?在应用程序范围内共享对象
是定义一个“主类”,然后设置一个成员变量,并从这个“主类”扩展所有其他类是一个好方法?创建一个静态类可能是更好更清洁的方式?你最喜欢的模式是什么?
在应用程序范围内使用对象很常见。 通过应用程序共享对象有哪些不同的模式/模型/方法?在应用程序范围内共享对象
是定义一个“主类”,然后设置一个成员变量,并从这个“主类”扩展所有其他类是一个好方法?创建一个静态类可能是更好更清洁的方式?你最喜欢的模式是什么?
在应用范围内使用对象是很常见的。通过应用程序共享对象的不同模式/模型/方式有哪些?
一个常见的方法是使用单例模式。但我会避免这种情况。
是定义一个“主类”,然后设置一个成员变量,并从该“主类”的好办法
绝对不延长所有其他类。除了其他任何东西,如果它是一个实例变量,那么它将不会与其他类的实例“共享”。这也是一个完全的继承滥用,这肯定会让你在任何显着大小的应用程序中遇到困难 - 你的其他类在逻辑上与你的“主”类没有继承关系,他们会吗?作为一般规则,继承只能在真正适用时才使用 - 而不是快速修复。
你最喜欢什么模式?
依赖注入。当你的应用程序启动时,创建所有需要了解彼此的适当对象,并告诉它们(通常在构造函数中)关于它们的依赖关系。如果合适的话,几个不同的对象都可以依赖于同一个对象。您可以使用其中的一个许多可用的依赖注入框架轻松实现此目的。
依赖注入通常工作比使用单件更好,因为:
单身和全球的工厂都更在适当的时候他们喜欢的事情记录 - 但即使如此,这意味着它是比较难以测试类的记录方面。创建一个依赖关系可以很简单地完成你所需要的工作,并将它传递给被测试的对象,而不是添加一些单例(通常在初始化后仍然是“固定的”)。
如果您使用像Spring这样的依赖注入框架,您可以免费获得“全局”对象的所有好处,而无需明确定义它们。您只需在您的应用程序上下文中创建对它们的引用,并且可以将它们注入到您想要的任何对象中,而无需担心同步问题。
我相信你正在寻找的是Singleton模式。通过这种模式,可以确保只有一个类的实例可以在内存中创建。
例子:
public class mySingletonClass {
private static mySingletonClass singleObject;
// Note that the constructor is private to prevent more than one
//instance of the class
private SingletonObjectDemo() {
// Optional Code
}
public static mySingletonClass getSingletonObject() {
if (singleObject == null) {
singleObject = new mySingletonClass();
}
return singleObject;
}
}
这就是说,你应该尽量避免使用它;但有一些可接受的情况,one of which is here。
我很好奇为什么应该避免单例模式 – 2012-03-24 21:49:21
@KshitijMehta:刚刚添加了这个 - 主要是为了可测试性。 – 2012-03-24 21:51:54
有没有你会使用单例模式的情况?您如何权衡在项目中包含DI框架所需的额外工作? – 2012-03-24 21:55:43