zoukankan      html  css  js  c++  java
  • 单例模式

    java设计模式中有一个模式叫单例模式,单例的意思就是该类只能产生一个实例,平时我们定义类可以随自己的意愿创建任意多的实例,但有些情况下,我们必须只能让某些类产生一个实例,像打印机一次只能执行一个打印进程,否则就会乱了。定义单例类我们就不能像普通定义类那样去定义该类了。从例子开始讲解怎么定义产生单例的类。

     1 class Singleton
     2 {
     3     private static Singleton singleton = new Singleton();//用static关键字修饰单例类实例,并定义为私有的
     4     private Singleton()//把构造方法定义为私有,这是最重要的
     5     {
     6         System.out.println("http://www.cnblogs.com/zhi-hao/");
     7     }
     8     
     9     public static Singleton getSingleton()//定义一个获得单例实例的方法,并用static修饰,这样外面就可以直接通过类名来调用该方法了
    10     {
    11         return singleton;
    12     }
    13 }
    Singleton
     1 public class TestSingleton
     2 {
     3     public static void main(String[] args)
     4     {
     5         //生成两个实例
     6         Singleton s1 = Singleton.getSingleton();
     7         Singleton s2 = Singleton.getSingleton();
     8         if(s1.equals(s2))//判断是否相等
     9         {
    10             System.out.println("s1 == s2");
    11             System.out.println(s1);//打印输出s1
    12             System.out.println(s2);//打印输出s2
    13         }
    14         else
    15         {
    16             System.out.println("s1 != s2");
    17             System.out.println(s1);
    18             System.out.println(s2);
    19         }
    20     }
    21 }
    TestSingleton

    结果:

    在定义单例类时更为标准的是下面的方法

     1 class Singleton
     2 {
     3     private static Singleton singleton = null;
     4     
     5     private Singleton()
     6     {
     7         System.out.println("http://www.cnblogs.com/zhi-hao/");
     8     }
     9     
    10     public static Singleton getSingleton()
    11     {
    12         if(null == singleton)//判断是否生成了实例,是就直接返回,否就先生成再返回生成的实例
    13         {
    14             singleton = new Singleton();
    15         }
    16         return singleton;
    17     }
    18 }
    Singleton

    以上是在忽略线程或线程安全的情况下成立,如果存在线程时,可能多个线程同时访问生成单例的代码从而就又可能生成多个实例。线程安全是指一个程序中存在多线程,但执行结果跟单线程的执行结果一样,线程也是java中很重要的一个知识点,在这里不详细讨论。

    由于水平有限,文章中难免有错误的地方,欢迎指出错误或不足之处,共同进步。欢迎转载,转载时请注明出处,谢谢。 ——by CIACs
  • 相关阅读:
    git的使用
    open():打开文件
    结合python+selenium使用AutoIt V3实现文件、图片上传
    Postman教程
    Python字符串切片
    python实现操作excel,数据写入excel的一行或者一列
    python打包exe
    spring boot基于DRUID数据源密码加密及数据源监控实现
    基于aop的日志记录方式实现
    Android中ContentProvider的简单使用
  • 原文地址:https://www.cnblogs.com/zhi-hao/p/3969355.html
Copyright © 2011-2022 走看看