将对象用于应用程序范围是很常见的。 通过应用程序共享对象的不同模式/模型/方式有哪些?
定义一个“主类”,然后设置一个成员变量并从这个“主类”扩展所有其他类是一个好方法吗?创建静态类可能是更好更清洁的方法吗?你最喜欢的模式是什么?
答案 0 :(得分:4)
将对象用于应用程序范围是很常见的。通过应用程序共享对象的不同模式/模型/方式有哪些?
一种常见的方法是使用单例模式。我会避免这种情况。
定义一个“主类”,然后设置一个成员变量并从这个“主类”扩展所有其他类的好方法
绝对不是。除了其他任何东西,如果它是实例变量,那么无论如何它都不会与其他类的实例“共享”。这也是对继承的完全滥用,在任何大规模的应用程序中肯定会让你苦苦挣扎 - 你的其他类在逻辑上与你的“主”类没有继承关系,是吗?作为一般规则,只有在非常合适的情况下才能使用继承 - 而不是实现快速修复。
你最喜欢的模式是什么?
依赖注入。当您的应用程序启动时,创建所有需要彼此了解的相应对象,并告诉它们(通常在构造函数中)它们的依赖关系。如果合适,几个不同的对象都可以依赖于同一个对象。您可以使用其中一个许多依赖注入框架轻松实现此目的。
依赖注入通常比使用单例更好,因为:
单身人士和全球工厂在进行日志记录等事情时更适合更多 - 但即便如此,这也意味着测试类的日志记录方面相对困难。创建一个依赖项可以更简单地创建一个依赖项,它可以满足您的需要,并将其传递给被测对象,而不是添加使用单例(通常在初始化后保持“固定”)的方法。
答案 1 :(得分:1)
如果您使用像Spring这样具有依赖注入的框架,您可以免费获得“全局”对象的所有好处,而无需明确定义它们。您只需在应用程序上下文中创建对它们的引用,就可以将它们注入到您想要的任何对象中,而无需担心同步问题。
答案 2 :(得分:0)
Singleton pattern,AFAIK是软件工程的首选方式。
答案 3 :(得分:0)
我相信你要找的是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。