java 单例模式讲解

来源:互联网 发布:apk编程自动发短信 编辑:程序博客网 时间:2024/05/29 09:00


         算是我的第一篇博客吧,之前一直也想要些,但是却一直停在了想写的这一阶段,今天决定写一篇关于单例模式的博客,既可以总结加深印象,提高个人技术,也是宣称程序员之路的正式开始吧,如果能够帮助其他人,就更好了,废话不多说,开始吧。

         单例模式,顾名思义,举个栗子,就是只有一个栗子可以吃,哈哈开个玩笑。

         下面进入正题(貌似已经开始过了,各位看官假装没看见)

        

         单例设计模式是一种创建型模式,指某个类在使用Singleton模式的时候,则在这个类被创建后,只能产生一个实例对象供外部来访问使用,并且会提供一个全局的访问点。

         其中核心点如下

1.     将采用单例设计模式的类的构造方法私有化(用private修饰),不允许其他类直接访问。    

2.     在其内部产生该类的实例化对象,并将其封装成private static 类型。

3.     定义一个静态方法返回该类的实例。

/**  * 方法一 * 单例模式的实现:饿汉式,线程安全 但效率比较低  */  public class Test {//定义一个私有的构造方法private Test() {}//将自身的实例对象设置为一个属性,并加上Static和final修饰private static final Test test = new Test();//静态方法返回类的实例public static Test getInstance(){return test;}}
优点:写起来简单,不存在多线程同步问题,避免了synchorized造成的性能优化问题。

缺点:

当这个类被加载时候,会初始化static test,静态变量被创建并分配内存空间,从此以后,这个static的test会一致占据着内存,即便没有用这个实例,zhi有当类被卸载销毁的时候,静态变量才会被摧毁,并释放所有的内存,因此某些特定的条件下会消耗内存。

public class Test {
//方法二
//懒汉式,线程不安全//定义一个私有的构造方法,防止通过new Test去实例化。private Test() {}//定义一个Test类型的变量(不初始化,因为后面要判断生成)private static Test test;//定义一个静态方法(调用时再初始化,但多线程访问时,可能造成重复的初始化问题)public static Test getInstance(){if(test == null){test = new Test();}return test;}}
优点:当Test被加载的时候,test并没有被分配空间,因为是空的,只有当运行了getInstance的时候,才会创建test。

缺点:在实际运行中可能会出现多个test的实例。

 

 

0 0
原创粉丝点击