zoukankan      html  css  js  c++  java
  • java 单利模式设计原理,饿汉式懒汉式,开发中推荐饿汉式

    单例模式的设计:

       1 //Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。

      

     1 //对象是方法被调用时,才初始化,也叫做对象的延时加载。成为:懒汉式。
     2 //Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
     3 class Single
     4 {
     5     private static Single s = null;//创建对象
     6     private Single(){}//防止被其他类对该类进行实例化,避免被调用
     7     public static Single getInstance()
     8     {
     9         //A B
    10         if(s==null)//如果A,B为空则进入
    11         {
    12             synchronized(Single.class)//A 进入后 此处功能是防止B进入,加入同步锁 只允许一个实例进入
    13             {                
    14                 if(s==null)//A为null
    15                 //对A进行实例化 再返回同步快12行,此时只有一个对象B,可以进入同步锁,到14行此时对象不为空因为实例化了A ,直接返回S
    16                     s = new Single();
    17             }
    18         }
    19         return s;
    20     }
    21 }
    22 
    23 //记录原则:定义单例,建议使用饿汉式。
     1 /*
     2 这个是先初始化对象。
     3 称为:饿汉式。
     4 
     5 Single类一进内存,就已经创建好了对象。
     6 class Single
     7 {
     8     private static Single s = new Single();
     9     private Single(){}
    10     public static Single getInstance()
    11     {
    12         return s;
    13     }
    14 }
    15 */
    16 
    17 //对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式。
    18 //Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
    19 class Single
    20 {
    21     private static Single s = null;
    22     private Single(){}
    23     public static Single getInstance()
    24     {
    25         if(s==null)
    26         {
    27             synchronized(Single.class)
    28             {                
    29                 if(s==null)
    30                     s = new Single();
    31             }
    32         }
    33         return s;
    34     }
    35 }
    36 
    37 //记录原则:定义单例,建议使用饿汉式。
    38 
    39 class  
    40 {
    41     public static void main(String[] args) 
    42     {
    43         System.out.println("Hello World!");
    44     }
    45 }

      饿汉式

     1 /*
     2 设计模式:解决某一类问题最行之有效的方法。
     3 java中23种设计模式:
     4 单例设计模式:解决一个类在内存只存在一个对象。
     5 
     6 
     7 想要保证对象唯一。
     8 1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
     9 2,还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
    10 3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
    11 
    12 这三部怎么用代码体现呢?
    13 1,将构造函数私有化。
    14 2,在类中创建一个本类对象。
    15 3,提供一个方法可以获取到该对象。
    16 
    17 
    18 
    19 对于事物该怎么描述,还怎么描述。
    20 当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
    21 
    22 
    23 */
    24 
    25 class Single
    26 {
    27 
    28 
    29     private  Single(){}
    30 
    31     private static Single s = new Single();
    32 
    33     public static  Single getInstance()
    34     {
    35         return s;
    36     }
    37 }
    38 
    39 
    40 class SingleDemo 
    41 {
    42     public static void main(String[] args) 
    43     {
    44         Single s1 = Single.getInstance();
    45         Single s2 = Single.getInstance();
    46 
    47         s1.setNum(23);
    48 
    49         System.out.println(s2.getNum());
    50 
    51 
    52         
    53 //        Single s1 = new Single();
    54 //        Single s2= new Single();
    55 //        s1.setNum(30);
    56 //        System.out.println(s2.getNum());
    57 
    58 //        Student s1 = new Student();
    59 //        s1.setAge(30);
    60 //
    61 //        Student s2 = new Student();
    62 //        s2.setAge(12);
    63 
    64         Student s1 = Student.getStudent();
    65         Student s2 = Student.getStudent();
    66 
    67         
    68 
    69 
    70     }
    71 }
    72 
    73 
    74 
    75 class Student
    76 {
    77     private int age;
    78 
    79 
    80     private static Student s = new Student();
    81     private Student(){}
    82     public static Student getStudent()
    83     {
    84         return s;
    85     }
    86 
    87 
    88 
    89     public void setAge(int age)
    90     {
    91         this.age = age;
    92     }
    93     public int getAge()
    94     {
    95         return age;
    96     }
    97 }
  • 相关阅读:
    原生searchView 自定义样式
    面试问题总结
    Android Studio开发环境搭建
    JAVA基本程序设计结构
    JAVA大数使用
    sql
    普通树的递归遍历
    6_43_递归交换二叉树中所有节点的左右子树
    6_42_二叉树递归求叶子节点个数
    6_44_二叉树中值为x的节点为根的子树的深度
  • 原文地址:https://www.cnblogs.com/itcqx/p/5546622.html
Copyright © 2011-2022 走看看