单例模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。
公司企业在招聘的时候为了考察员工对设计模式的了解,考的最多的就是单例模式。
设计模式——单例模式(Singleton)
保证一个类仅有一个实例,并提供一个访问它的全局访问点

(1)该模式拥有一个私有构造函数(确保用户无法直接通过new直接实例化它)。
(2)该模式包含一个静态私有成员变量instance(为了使这个类的所有对象共享这一个成员变量)。
(3)该模式包含一个静态公有方法GetInstance(不通过对象而直接通过类去访问)。GetInstance方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实力被创建。
1、单例模式的本质:控制实例数目
2、单例模式的特点:
(1)单例类只能有一个实例
(2)单例类必须自己创建自己的唯一实例
(3)单例类必须给所有其它对象提供这一实例
3、单例模式的分类:
单例模式的实现分为两种:
懒汉式单例模式(时间换空间)——当需要调用时再进行实例化
class Singleton
{
private static Singleton instance;
private Singleton(){}
public static Singleton GetInstance()
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
}
饿汉式单例模式(空间换时间)——直接进行实例化
class Singleton
{
private static Singleton instance=new Singleton();
private Singleton(){}
public static Singleton GetInstance()
{
return instance;
}
}
4、应用场景:
使用单例模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式。
单例模式实现读取配置文件的功能:
//xml文件 <?xml version="1.0" encoding="UTF-8"?> <bookshelf> <book> <bookname>JavaWeb开发</bookname> <author>张三</author> <price>68.0</price> </book> <book> <bookname>AJAX开发实战</bookname> <author>李四</author> <price>100</price> </book> </bookshelf>//单例模式实现类 package qhq.Singleton; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class Singleton { private static Singleton instance; private Singleton(){} public static Singleton GetInstance() { if(instance==null) { instance=new Singleton(); //File file=new File(""); try{ //1.建立DocumentBuilderFactor,用于获得DocumentBuilder对象: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.建立DocumentBuidler: DocumentBuilder builder = factory.newDocumentBuilder(); //3.建立Document对象,获取树的入口: Document doc = builder.parse("src//book.xml"); //4.建立NodeList: NodeList node = doc.getElementsByTagName("book"); //5.进行xml信息获取 for(int i=0;i<node.getLength();i++){ Element e = (Element)node.item(i); System.out.println("书名:"+ e.getElementsByTagName("bookname").item(0).getFirstChild().getNodeValue()); System.out.println("作者:"+ e.getElementsByTagName("author").item(0).getFirstChild().getNodeValue()); System.out.println("价格:"+ e.getElementsByTagName("price").item(0).getFirstChild().getNodeValue()); } }catch(Exception e){ System.err.print("读取配置文件失败!"); e.printStackTrace(); } } return instance; } }//测试的主类 package qhq.Singleton; public class Singleton_text { public static void main(String[] args) { // TODO Auto-generated method stub Singleton.GetInstance(); } }
单例模式是一种常见的设计模式,确保一个类只有一个实例,并提供全局访问点。在面试中,它是考察设计模式知识的热门话题。单例模式通过私有构造函数、静态私有成员变量和公有静态获取实例的方法来实现。它分为懒汉式(延迟初始化)和饿汉式(提前初始化)两种实现方式。单例模式适用于控制实例数目,如用于读取配置文件等场景。
1006

被折叠的 条评论
为什么被折叠?



