从这个来源我读到:
您可能有使用JDBC驱动程序的经验.例如,类加载器尝试加载和链接"org.gjt.mm.mysql"包中的Driver类.如果成功,则调用静态初始化程序.
Class.forName("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection(url,"myLogin", "myPassword");
Run Code Online (Sandbox Code Playgroud)
让我们看看为什么需要Class.forName()将驱动程序加载到内存中.所有JDBC驱动程序都有一个静态块,它使用DriverManager注册自己,而DriverManager只有静态初始化程序.
MySQL JDBC驱动程序有一个静态初始化程序,如下所示:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
} }
Run Code Online (Sandbox Code Playgroud)
这是否意味着DriverManager是Singleton类?
下面是使用单例设计模式的类:
class Singleton
{
private static Singleton instance;
private Singleton()
{
...
}
public static synchronized Singleton getInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
...
public void doSomething()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道关于上述课程的一些设计问题?为什么实例变量是instance私有的和静态的.我知道私有使实例变量只能访问该特定类的对象,但它如何帮助?
这个单例实现在给定的多线程应用程序中是否正常:没有序列化,反序列化
public class NewSingleton {
private static final NewSingleton RAJNI= new NewSingleton();
private NewSingleton(){
}
public static NewSingleton getInstance() {
return RAJNI;
}
}
Run Code Online (Sandbox Code Playgroud) A级1
public class A {
private static final A instance = new A();
public static A getInstance() {
return new A();
}
}
Run Code Online (Sandbox Code Playgroud)
A级2
public class A {
private static final A instance = new A();
private A(){}
public static A getInstance() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我刚开始学习单例,我看到了两个使用A 1示例和A 2示例的Java示例.A 1级getInstance()是单身吗?我也想知道这两个A类getInstance()方法有什么区别?谢谢
我认为单例实例不应该被垃圾收集,但是我维护了一个单例对象,并在初始化时标记它,如下所示:
private static LocalCache instance;
public LocalCache() {
// initialize objects......
}
public static LocalCache getInstance() {
if (instance == null) {
instance = new LocalCache();
Log.e("instance", "new");
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我发现这个日志在我的应用程序中不止一次出现.更确切地说,我在FragmentActivity中有5个片段.当我按下主页按钮执行某项任务并切换回活动时,单例类似乎被重新分配.我的代码中有什么问题吗?或者我可以阻止重新创建片段吗?我确定我没有为实例分配null.
@Override
protected void finalize() throws Throwable {
Log.e("finalize", "finalize");
}
Run Code Online (Sandbox Code Playgroud)
我也覆盖finalize()它以查看它何时被销毁,但是日志没有出现在第二个"新实例"日志之前.
public class ConnectionManager {
private static Map <String, ConnectionManager> managerInstances = new HashMap<String, ConnectionManager>();
private String dsKey;
private ConnectionManager(String dsKey){
this.dsKey = dsKey;
}
public static ConnectionManager getInstance(String dsKey){
ConnectionManager managerInstance = managerInstances.get(dsKey);
if (managerInstance == null) {
synchronized (ConnectionManager.class) {
managerInstance = managerInstances.get(dsKey);
if (managerInstance == null) {
managerInstance = new ConnectionManager(dsKey);
managerInstances.put(dsKey, managerInstance);
}
}
}
return managerInstance;
}
}
Run Code Online (Sandbox Code Playgroud)
我最近在GoF的书籍定义中没有使用Singleton模式的地方看到了这段代码.Singleton正在存储一个Map自己的实例.
这可以称为什么样的单身人士?或者这是Singleton的有效使用?
如果单例被认为对全局状态不利,特别是可能影响代码主要执行的状态,那么应该如何处理全局状态呢?
想到的直接事情是:
我不能看到除了单身之外的任何其他方式来访问这些,如App()类或类似的?
我使用延迟初始化方法创建了一个Singleton类.这就是getInstance方法是同步的.但是,如果不改变设计模式,有一种方法可以创建Singleton类的多个实例.因为更改Singleton模式将需要进行大量的体系结构更改.请建议一种创建多个实例的方法.请帮助Java.
在我的Android应用程序中,我有一个Singleton类.当应用程序任务存活时,它就像一个魅力.但是在应用程序任务被杀死之后,Singleton类被破坏了,这显然是.我需要让这堂课永远活着.可能吗?什么是使这个类从未被Android系统杀死的最佳方法,在这种情况下我是否需要使用后台服务?
我创建了一个Objective-C Singleton类.我在课堂上有一些属性,包括BOOL属性.由于一些奇怪的原因BOOL,我声明的变量在设置的范围之外"重置"为YES.
在Singleton类的头文件中,BOOL使用@property以下参数声明:
@property (nonatomic, assign, readonly) BOOL shouldCryptData;
Run Code Online (Sandbox Code Playgroud)
在实现中的Singleton类@interface中,我重新定义了相同的属性readwrite(因为我需要它只能读取到外部类,而是读取/写入我自己的).
@interface SingletonClassName ()
@property (nonatomic, assign, readwrite) BOOL shouldCryptData;
@end
Run Code Online (Sandbox Code Playgroud)
BOOL在单例类的初始化期间设置该属性.我在其中一个init方法中设置它.有多种init方法可以指定是否应该加密数据 - 这只是设置位置的一个示例.只有一个我的init方法调用super,所有其他方法调用main init.
- (id)init {
self = [super init];
if (self) {
// Brief setup code
[self setShouldCryptData:NO]; // Have also tried using dot-notation and without *self*
// I can confirm that the shouldCryptData property is NO (within the current scope) …Run Code Online (Sandbox Code Playgroud)