• 单例的设计模式代码演示 + 内存分析图详解


    设计模式:解决某一类问题最行之有效的方法(手段)。

    java中有23中设计模式。

    单例设计模式:解决一个类在内存中只存在一个对象。

    想要保证对象的唯一性:

      1.为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象。

      2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。

      3.为了方便其他程序对自定义对象的访问,可以对外提供一个访问方式。

    这三步怎么用代码来体现呢?

      1.将构造函数私有化。

      2.在类中创建一个本类对象。

      3.提供一个公共的方法可以获取到该对象。

    1、饿汉式:先初始化对象

     1 package com.wisezone.day06;
     2 
     3 /**
     4  * java中有23种对象设计模式 
     5  * 单例设计模式:解决一个类中只存在一个对象
     6  * @author 王东海 @date. 2016年8月30日
     7  * @version v1.0
     8  */
     9 // 饿汉式:先初始化对象。
    10 class Single {
    11     
    12     // 1、将构造器私有化,不能在类的外部创建该类的对象
    13     private Single() {}
    14 
    15     // 2、创建对象,私有的,只能在类的内部访问
    16     private static Single s = new Single();
    17 
    18     // 3、提供一个公共方法可以获取到对象
    19     public static Single getInstance() {
    20         return s;
    21     }
    22 }
    23 
    24 public class SingleDemo {
    25     public static void main(String[] args) {
    26         //构造函数私有化后,我们就需要使用:类名.方法
    27         Single s1 = Single.getInstance();
    28         Single s2 = Single.getInstance();
    29         System.out.println(s1);//com.wisezone.day06.Single@17b68215
    30         System.out.println(s2);//com.wisezone.day06.Single@17b68215
    31     }
    32 }

    在内存中分析

    2、懒汉式 

     1 package com.wisezone.day06;
     2 
     3 /**
     4  * java中有23种对象设计模式 
     5  * 单例设计模式:解决一个类中只存在一个对象
     6  * @author 王东海 @date. 2016年8月30日
     7  * @version v1.0
     8  */
     9 // 懒汉式:对象在调用时,才初始化,也称为对象的延时加载。
    10 class Single2 {
    11     
    12     // 1、将构造器私有化,不能在类的外部创建该类的对象
    13     private Single2() {}
    14 
    15     // 2、先声明类的引用
    16     private static Single2 ss = null;
    17 
    18     // 3、提供一个公共方法可以访问类的实例
    19     public static Single2 getInstance() {
    20         
    21         //3.1如果类的实例未创建,那些先要创建,然后返回给调用者:本类。因此,需要static 修饰。
    22         if (ss == null) {
    23             ss = new Single2();
    24         }
    25         //3.2 若有了类的实例,直接返回给调用者。
    26         return ss;
    27     }
    28 }
    29 
    30 public class SingleDemo2 {
    31     
    32     public static void main(String[] args) {
    33         //构造函数私有化后,我们就需要使用:类名.方法
    34         Single2 ss1 = Single2.getInstance();
    35         Single2 ss2 = Single2.getInstance();
    36         System.out.println(ss1);//com.wisezone.day06.Single2@28084850
    37         System.out.println(ss2);//com.wisezone.day06.Single2@28084850
    38     }
    39 }

     在内存中分析

    注意:开发时,建议使用饿汉式。

    因为它获取实例的步骤简单,所以它是线程安全的。

  • 相关阅读:
    ZOJ3213-Beautiful Meadow
    ZOJ3256-Tour in the Castle
    ZOJ3466-The Hive II
    hdu3377-Plan
    fzu1977-Pandora Adventure
    ural1519-Formula 1
    poj2914-Minimum Cut
    51nod-1220-约数之和
    51nod-1222-最小公倍数计数
    【html】【6】div浮动float
  • 原文地址:https://www.cnblogs.com/wdh1995/p/6715450.html
Copyright © 2020-2023  润新知