`

单例模式简单例子

    博客分类:
  • J2SE
阅读更多
package test.singleton;

/**
 * 文件日志类
 *
 */
public class FileLogger implements Logger
{
	private static FileLogger logger;
	
	private FileLogger()
	{
		
	}
	
	public static FileLogger getFileLogger()
	{
		if(logger==null)
		{
			logger = new FileLogger();
		}
		return logger;
		
	}
	public synchronized void log(String msg) {
		FileUtil futil = new FileUtil();
		futil.writeToFile("log.txt", msg);
	}
	
}



package test.singleton;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileUtil 
{
	/**
	 * 写文件
	 * @param fileName
	 * @param message
	 */
	public void writeToFile(String fileName,String message)
	{
		try 
		{
			BufferedWriter out = new BufferedWriter(new FileWriter(fileName,true));
			out.write(message);
			out.write("\n");
			out.close();
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
		
	}
}



package test.singleton;

/**
 * 日志接口
 *
 */
public interface Logger {
	/**
	 * 日志方法
	 * @param msg
	 */
	public void log(String msg);
}



package test.singleton;

import java.io.IOException;
import java.util.Properties;

/**
 * 日志工厂类
 */
public class LoggerFactory {
	/**
	 * 文件日志是否启用
	 * @return true:启用 false:未启用
	 */
	public boolean isFileLoggingEnabled()
	{
		
		Properties p = new Properties();
		try
		{
			p.load(ClassLoader.getSystemResourceAsStream("logger.properties"));
			String fileLoggingValue = p.getProperty("FileLogging");
			if(fileLoggingValue.equalsIgnoreCase("ON")==true)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		catch (IOException e) {
			return false;
		}
	}
	
	/**
	 * 
	 * @return
	 */
	public Logger getLogger()
	{
		if(isFileLoggingEnabled())
		{
			return FileLogger.getFileLogger();
		}
		return null;
		
	}
}


package test.singleton;

public class LoggerTest {
	public static void main(String[] args)
	{
		LoggerFactory factory = new LoggerFactory();
		Logger logger = factory.getLogger();
		logger.log("Test Message to Log1");
		logger.log("Test Message to Log2");
		logger.log("Test Message to Log3");
	}
}



FileLogging=ON
  • 大小: 13.1 KB
  • 大小: 18.1 KB
分享到:
评论

相关推荐

    java单例模式的例子

    Java单例模式是一种常见的设计模式,它在软件工程中用于控制类的实例化过程,确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统资源管理、缓存、日志记录等方面应用广泛。下面我们将深入探讨Java单例...

    使用C++11实现线程安全的单例模式

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...

    单例模式实现mdi界面子窗体控制

    首先向关注过我这个系列...这立刻让我想到了最常用也是最简单最容易理解的一个设计模式 单例模式 何为 单例模式 ? 故名思议 即 让 类 永远都只能有一个实例。 由于 示例代码 比较简单 我也加了注释,这里就不在赘述

    使用单例模式实现计数器

    以下是一个简单的C#单例模式实现计数器的例子: ```csharp public sealed class Counter { private static readonly Counter _instance = new Counter(); private int _count; // 私有构造函数 private ...

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...

    单例模式,single

    尽管单例模式简单有效,但它也存在一些潜在问题,特别是在 Java 的环境中。这些问题包括: - **多线程环境下实例的创建**:在多线程环境下,如果没有正确地处理同步,可能会导致多个线程同时创建实例,从而破坏单例...

    使用python写的单例模式日志记录器(设计模式之单例模式)

    下面是一个简单的Python单例模式日志记录器的实现: ```python class SingletonLogger(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super...

    qt5编写的单例模式

    下面是一个简单的Qt5单例模式示例: ```cpp #include #include class Singleton : public QObject { Q_OBJECT private: Singleton() {} // 私有构造函数 static Singleton* instance; // 静态成员变量 ...

    java单例模式完全剖析

    总之,Java中的单例模式虽然简单,但在多线程、类加载器和序列化等特定场景下需要特别注意,以确保其正确性和安全性。开发者应当根据具体的应用场景选择合适的单例实现方式,以达到最佳的效果。

    工厂模式与单例模式

    在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...

    OC单例模式讲解

    下面是一个简单的单例模式实现示例: ```objective-c @interface Singleton : NSObject + (instancetype)sharedSingleton; @end @implementation Singleton static Singleton *sharedInstance = nil; + ...

    单例模式.zipIOS应用例子源码下载

    以下是一个简单的Objective-C单例模式实现: ```objc // MyClass.h #import @interface MyClass : NSObject + (instancetype)sharedInstance; @end // MyClass.m #import "MyClass.h" static MyClass *...

    单例模式的简单使用

    下面是一个简单的Swift中使用单例模式的例子: ```swift class Singleton { static let shared = Singleton() private init() {} // 确保外部无法通过init来创建实例 // 添加你需要共享的属性和方法 var ...

    单例模式的详细讲解

    这个文档详细的讲解了单例模式,通俗易懂,里面包含的一个简单例子更是有利于理解,希望对大家有用

    简单工厂,代理模式,单例模式demo

    在众多设计模式中,“简单工厂”、“代理模式”和“单例模式”是三种常见的设计模式,它们各自有着明确的使用场景和设计目标。 首先,“简单工厂模式”是一种创建型模式,它定义了一个创建对象的接口,但让决定创建...

    Singleton pattern单例模式应用

    在给定的部分内容中,虽然没有直接展示单例模式的实现,但我们可以基于其原理来构建一个简单的Java单例模式例子。下面是一个典型的饿汉式单例模式的Java实现: ```java public class Singleton { // 私有构造函数...

    单例模式----数据库连接池管理类的应用

    单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在IT行业中,尤其是在处理资源密集型任务如数据库连接时,单例模式被广泛应用。数据库连接池就是这种应用的一个典型例子。 ...

    java-单例模式几种写法

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的...

    C++实现Singleton单例模式

    下面是一个简单的实现例子: ```cpp class CSingleton { public: static CSingleton *GetInstance() { if (m_pInstance == NULL) { m_pInstance = new CSingleton(); } return m_pInstance; } private: ...

Global site tag (gtag.js) - Google Analytics