• Java设计模式之单例模式


    学习java有一段时间了,想更高的使用java,就准备学习些设计模式。设计模式是一种经验,或者说是一种模型,与无头脑的编写代码与使用设计模式相比,设计模式更有效率和规范。

    今天介绍单例模式,单例模式就是说,应用的全局某个类只有一个实例,好比你只有一个丈夫或者老婆即可,多了会出乱子。主要用于工具类,线程池等场景。。。

    单例模式分为饿汉模式和懒汉模式。

    饿汉模式:

     1 public class Ehan {
     2 
     3     //饿汉模式的步骤
     4 
     5     // 1.对该类的构造方法私有化,不允许外部创建对象。
     6     private Ehan() {
     7     }
     8     // 2.在本类中创建自己的实例化对象
     9 
    10     private static Ehan ehan = new Ehan();
    11 
    12     // 3.提供一个外部调用实例的方法
    13 
    14     public static Ehan getEhan() {
    15         return ehan;
    16 
    17     }
    18 
    19 
    20 }

    测试:

     1     public static void main(String[] args) {
     2         // 测试饿汉模式
     3 
     4         Ehan ehan1 = Ehan.getEhan();
     5         Ehan ehan2 = Ehan.getEhan();
     6         if (ehan1 == ehan2) {
     7             System.out.println("ehan是同一个实例");
     8         }
     9 
    10 
    11 
    12 }

    结果:打印出ehan是同一个实例

    懒汉模式:

     1 public class LanHan {
     2 
     3 
     4     //1. 私有化构造方法
     5     private LanHan() {
     6     }
     7 
     8     //2. 声明本类的实例
     9     private static LanHan lanHan;
    10 
    11     //3. 提供外部调用的方法
    12     public static LanHan getLanHan() {
    13 
    14         if (lanHan == null) {
    15             lanHan = new LanHan();
    16         }
    17         return lanHan;
    18 
    19     }
    20 
    21 }

    测试:

     1     public static void main(String[] args) {
     2 
     3         // 测试懒汉模式
     4 
     5         LanHan lanHan1 = LanHan.getLanHan();
     6         LanHan lanHan2 = LanHan.getLanHan();
     7 
     8         if (lanHan1 == lanHan2) {
     9             System.out.println("lanHan是同一个实例");
    10         }
    11 
    12 
    13     }
    14 
    15 }

    结果:lanHan是同一个实例

    以上就是两种单例模式的代码实现,其中有些区别:

    * 饿汉模式是先实例化对象,等着别人来调。所以加载类时速度慢,运行期间调用时速度快。
    * 懒汉模式是别人调用时,再创建对象,所以加载类时快,调用时慢。


    厚积薄发,不忘初衷
  • 相关阅读:
    利用API将软件嵌入网页中
    TensorFlow:tf.train.Saver()模型保存与恢复
    TensorFlow:tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None)
    TensoFlow的tf.reshape()
    Python:查看矩阵大小,查看列表大小
    TensorFlow:tf.contrib.layers.xavier_initializer
    python:list
    TensorFlow-Python:创建空列表list与append的用法
    MATLAB:读取mat文件中物体的三维坐标,显示三维模型
    查看已装TensorFlow的版本和路径
  • 原文地址:https://www.cnblogs.com/grasser/p/8484078.html
Copyright © 2020-2023  润新知