我遇到了一个可以通过两种方式同样解决的问题。例如,该类DeviceState每秒访问设备数十次,因此每次都创建一个实例不是一种选择。
使用单例或使类静态化。这就是它的工作原理。我无法做出选择。就便利性而言,似乎静态胜出。内存和性能有什么区别吗?
//singleton
DeviceState ds = ModbusMaster.getDeviceState(); //там происходит return DeviceState.getInstance(connParams);
System.out.println(ds.getLedState());
//full static
DeviceState.refreshData();
System.out.println(DeviceState.ledState);
我认为在你的情况下最好使用单身人士。这是一篇关于该主题的好文章:
并且由于您的课程本身被称为
DeviceState,我认为它应该支持不同的状态,这意味着您需要一个单身人士。至于性能:
但我认为您不会注意到性能上的特殊差异,使用单例在风格上是正确的。
在性能和内存方面,在您的情况下,静态与单例没有区别。使用第二种方法(Singletone)是有意义的。这将使您以后能够利用多态性。例如,在测试环境中,可以将实现替换
DeviceState为具有测试所需逻辑的“存根”,或者根据与之通信的设备类型更改实现DeviceState。不要想多快(在你剖析之前),想想如何做对。
静态方法
DeviceState意味着该方法适用于所有可能的DeviceState. 单例意味着您只有一个DeviceState,并且您调用的方法完全引用它。在您的情况下,您恰好有第二个选择:您有一台设备。所以使用单例。
您不必怀疑“有多快”。如果您“尽可能快地”编写所有内容,则不需要任何类或方法,而只需要一个带有 goto 的大方法。提前提升性能是没有意义的,“过早的优化是万恶之源”。
好吧,不幸的是,每秒一百个调用是如此之小,以至于没有人会注意到速度上的差异。