我只是好奇使用单身模式...我知道模式是如何工作的以及它可以在哪里使用但我个人从未在任何实际应用中使用过.有人可以给出一个可以使用它的例子.如果有人可以解释它们在实际应用中的使用方式和位置,我真的很感激.谢谢,斯瓦蒂
我有一个应用程序,我有一个名为的类PlausibilityChecker.这个类只有静态方法,比如checkZipcodeFormat或checkMailFormat.我在GUI类中使用它们来检查输入,然后再将它发送到较低层.
这是好习惯吗?我以为我只使用静态方法,所以我不必关心将实例传递给GUI类或者在每个gui类中都有一个不引用gui对象的实例字段.
我注意到这个Files类Java NIO只有静态方法所以我认为这不是那么可怕的错误.
你能否解释为什么Spring为下面显示的bean配置创建两个对象,因为默认情况下spring默认范围是singleton?
Spring配置在这里:
<bean id="customer" class="jp.ne.goo.beans.Customer">
<property name="custno" value="100"></property>
<property name="custName" value="rajasekhar"> </property>
</bean>
<bean id="customer2" class="jp.ne.goo.beans.Customer">
<property name="custno" value="200"></property>
<property name="custName" value="siva"></property>
</bean>
Run Code Online (Sandbox Code Playgroud) 我正在编写我的第一个iPhone应用程序而且我无法切换视图.我有2个视图和每个(在AppDelegate一个实例中UIApplicationDelegate)的引用.我创建了两个实例applicationDidFinishLaunching并立即显示第一个视图.这很好用.
问题是在AppDelegate中引用另一个视图,我无法弄清楚如何获取它的引用,所以我可以切换到另一个视图.有没有办法获得对主要UIApplication或UIApplicationDelegate对象的引用?
如果我们序列化静态类会发生什么?如果我们序列化它,可以创建多个静态类的实例吗?
[Serializable]
public static class MyClass
{
public static MyClass()
{
}
public static bool IsTrue()
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
假设我将对象XmlSerialize为XML文件,稍后我反序列化回一个对象.另一个副本存在于内存中(当somone第一次直观地表达静态calss时创建).请问,有两个副本的对象?如果是的话,我们可以阻止吗?它是否适用于遵循单例模式的任何类?
我碰巧发表了一篇文章,最近讨论了Java中的双重检查锁定模式及其陷阱,现在我想知道我多年来一直使用的那种模式的变体是否会受到任何问题的影响.
我已经查看了很多关于这个主题的帖子和文章,并了解了获取对部分构造对象的引用的潜在问题,据我所知,我认为我的实现不受这些问题的影响.以下模式是否有任何问题?
而且,如果没有,为什么人们不使用它?我在这个问题的任何讨论中都没有看过它.
public class Test {
private static Test instance;
private static boolean initialized = false;
public static Test getInstance() {
if (!initialized) {
synchronized (Test.class) {
if (!initialized) {
instance = new Test();
initialized = true;
}
}
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud) java singleton multithreading synchronization double-checked-locking
单身实际上何时比静态类更容易或更好?在我看来,创建单身只是额外的努力,实际上并不需要,但我确信有一个很好的理由.否则,显然不会使用它们.
我目前的实施,简化:
#include <string>
#include <memory>
class Log
{
public:
~Log() {
// closing file-descriptors, etc...
}
static void LogMsg( const std::string& msg )
{
static std::unique_ptr<Log> g_singleton;
if ( !g_singleton.get() )
g_singleton.reset( new Log );
g_singleton->logMsg( msg );
}
private:
Log() { }
void logMsg( const std::string& msg ) {
// do work
}
};
Run Code Online (Sandbox Code Playgroud)
总的来说,我对此实现感到满意,因为:
但是,负面因素是:
所以这里是我的问题针对那些成功从他们的C++代码中驱逐所有单例的开发人员:
我想避免在我的代码中传递一个Log实例,如果可能的话 - 注意:我问,因为,如果有一个好的,合理的选择,我也想从我的代码中驱除所有Singletons.
我正在从Slick迁移到Slick 2,在Slick 2中你想tupled在投影到案例类时使用该方法(如http://slick.typesafe.com/doc/2.0.0-所示)RC1/migration.html)
问题是当case类有一个伴随对象时,即如果你有这样的东西
case class Person(firstName:String,lastName:String) {
}
Run Code Online (Sandbox Code Playgroud)
与伴侣对象一起
object Person {
def something = "rawr"
}
Run Code Online (Sandbox Code Playgroud)
在相同的范围内,该tupled方法不再有效,因为它试图运行tupled的object,而不是,case class.
有没有一种方法来检索case class的Person,而不是object,所以你可以调用tupled正确?