单例模式对Socket有意义吗?

时间:2014-02-04 09:40:26

标签: java sockets design-patterns

我有一个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需要能够在整个程序过程中的任何时候重新连接和断开连接,并且我不确定单身是否可行。

据我所知,这是不可能的,虽然我希望有一些技巧,或者我只是误解了一些东西。

2 个答案:

答案 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作为实例成员。