我有一个Java应用程序,其中有一个套接字。现在非常重要的是,任何时候只有一个插座可以打开。我认为确保这一点的一个好方法是创建一个包装类来强制Socket
实例上的单例属性。为了澄清:通过单例模式,我指的是以下泛型类设计:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
//Private constructor prevents instantiating and subclassing
private Singleton(){ }
//Static 'instance' method
public static Singleton getInstance( ) {
return INSTANCE;
}
//...Other class methods
}
我想知道单个插槽的概念是否在概念上有意义。 Socket
需要能够在整个程序过程中的任何时候重新连接和断开连接,并且我不确定单身是否可行。
据我所知,这是不可能的,虽然我希望有一些技巧,或者我只是误解了一些东西。
答案 0 :(得分:3)
当然,为什么不呢?当您需要在应用程序的任何位置可访问的类的唯一实例时,将应用单例模式。
在这种情况下,您的单件包装器可以在构造函数中创建套接字的实例,并公开方法以透明地管理套接字以用于应用程序的其余部分。
伪代码示例可以是:
public class SocketDevice{
private static final SocketDevice INSTANCE = new SocketDevice();
private Socket socket;
//Private constructor prevents instantiating and subclassing
private SocketDevice(){
// instanciates the socket ...
}
//Static 'instance' method
public static SocketDevice getInstance( ) {
return INSTANCE;
}
public void open(){
// ...
socket.open()
// ...
}
public void close(){
// ...
socket.close()
// ...
}
// ...
}
答案 1 :(得分:1)
我不认为这真的会给你带来任何好处:事实上它可能会给你一种虚假的安全感。它不会阻止应用程序的任何其他部分调用新的Socket(...)。我会在某个地方使用Socket作为实例成员。