Java 单例模式示例
请给我一个单例模式的实时示例。Java 单例模式示例,java,oop,Java,Oop,请给我一个单例模式的实时示例。 访问共享文件的不同线程是否为单线程?因为每个线程都访问文件的同一个实例,而不是它们自己的单个实例。是的,但前提是所有线程都访问同一个文件,并且您使用的是自定义实现(不是java.io.file,可能是包装器) singleton模式是一种设计模式,用于将类的实例化限制为一个对象 单例(通常是一个错误的选择)是在整个程序中只能有一个实例的类 例如,SingletonConfigFile可能如下所示。记住: 它只用于读取一个文件。这将是一个配置文件 如果您的类可以针
访问共享文件的不同线程是否为单线程?因为每个线程都访问文件的同一个实例,而不是它们自己的单个实例。是的,但前提是所有线程都访问同一个文件,并且您使用的是自定义实现(不是
java.io.file
,可能是包装器)
singleton模式是一种设计模式,用于将类的实例化限制为一个对象
单例(通常是一个错误的选择)是在整个程序中只能有一个实例的类
例如,SingletonConfigFile
可能如下所示。记住:
- 它只用于读取一个文件。这将是一个配置文件
- 如果您的类可以针对不同的文件多次实例化,那么它就不是单例的
- 不要使用这段代码——它没有考虑到并发问题,这是一个完全不同的讨论领域
-只有一个能量环(索伦的),再多也没有了RingOfPower.getInstance()
-只有一颗星叫做“Sun”Sun.getInstance()
- 应用程序中逻辑上只应存在一次的所有对象—注册表、应用程序上下文等
java.io.file
,可能是包装器)
singleton模式是一种设计模式,用于将类的实例化限制为一个对象
单例(通常是一个错误的选择)是在整个程序中只能有一个实例的类
例如,SingletonConfigFile
可能如下所示。记住:
- 它只用于读取一个文件。这将是一个配置文件
- 如果您的类可以针对不同的文件多次实例化,那么它就不是单例的
- 不要使用这段代码——它没有考虑到并发问题,这是一个完全不同的讨论领域
-只有一个能量环(索伦的),再多也没有了RingOfPower.getInstance()
-只有一颗星叫做“Sun”Sun.getInstance()
- 应用程序中逻辑上只应存在一次的所有对象—注册表、应用程序上下文等
- 一个“文件”不是一个Java对象(而且
Java.io.file
肯定不是一个单一对象)。我也不会认为磁盘上的文件是一个单独的文件,它们只是共享资源。特别是,磁盘上并不是只有一个文件:)
单例模式的一个更常见的例子是配置或日志记录。例如,LogManager.getLogManager
返回“the”LogManager
,您不能创建新的。同样,您可能有一个可以静态访问的公共配置对象。(在依赖注入系统中,配置很可能不是单例,但是-相反,每个组件都提供了它们所需的配置位,这样它们就不必获取“公共”配置。)一个“文件”不是一个Java对象(而且Java.io.file
肯定不是单例)。我也不会认为磁盘上的文件是一个单独的文件,它们只是共享资源。特别是,磁盘上并不是只有一个文件:)
单例模式的一个更常见的例子是配置或日志记录。例如,
LogManager.getLogManager
返回“the”LogManager
,您不能创建新的。同样,您可能有一个可以静态访问的公共配置对象。(在依赖注入系统中,配置很可能不是单一的,但是-相反,每个组件都提供了它们所需的配置位,这样它们就不必获取“公共”配置位。)单一的通常意味着拥有一个只存在一个实例的类
松弛可能是一个具有著名的系统范围的单个实例的类(除了您可能创建的其他实例之外)
java.io.File
不是单例类。单例通常意味着拥有一个只能存在一个实例的类
松弛可能是一个具有著名的系统范围的单个实例的类(除了您可能创建的其他实例之外)
java.io.File
不是一个单例类。单例是一种设计反模式,在这种模式中,类被赋予一个私有构造函数和一个特殊的“getInstance()”、“INSTANCE()”或“INSTANCE()”静态函数,该函数负责返回(以及可能的构造,具体取决于是否使用惰性单例)唯一的对象实例。在隐藏依赖项时,单例通常会导致依赖项膨胀,并使得在单元测试期间很难模拟单例类,或者用非单例的东西替换单例,而事实证明,对象应该是单例的假设实际上并不成立
单例反模式的解决方案是使用所谓的“依赖注入”。您可能会发现这篇名为“谷歌Techtalk”的文章很有启发性,它解释了依赖注入
还有另一种形式的单例性,它与单例反模式无关。。。也就是说,如果您碰巧只创建了一个类的实例并将其传递给其他人,但是您没有强制si
public SingletonConfigFile {
private static String filename = "config.xml";
private File file;
private static SingletonConfigFile instance;
private SingletonConfigFile() {
if (instance != null) {
throw new Error();
}
file = new File(filename);
}
public synchronized SingletonConfigFile getInstance() {
if (instance == null) {
instance = new SignletonConfigFile();
}
return instance
}
public String read() {
// delegate to the underlying java.io.File
}
}
public class SingleTonDesignPattern {
public static SingleTonDesignPattern singleTon = null;
public Properties priperty = null;
private SingleTonDesignPattern() {
}
public static SingleTonDesignPattern getSingleTon() {
return singleTon;
}
public Properties getPriperty() {
return priperty;
}
public void setPriperty(Properties priperty) {
this.priperty = priperty;
}
public static synchronized SingleTonDesignPattern getSingleTonObject() {
if(singleTon == null) {
singleTon = new SingleTonDesignPattern();
Properties properties1 = new Properties();
try {
properties1.load(new FileInputStream("c:/labels.properties"));
singleTon.setPriperty(properties1);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return singleTon;
}
}
public class Singleton {
private static Singleton singleton = new Singleton( );
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton(){ }
/* Static 'instance' method */
public static Singleton getInstance( ) {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod( ) {
System.out.println("demoMethod for singleton");
}
}