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

    题外话

    写代码:

    1,明确需求——我要做什么?

    2,分析思路——我要怎么做?1,2,3。

    3,确定步骤——每一个思路部分用到哪些语句,方法,和对象。

    4,代码实现——用具体的java语言代码把思路体现出来。

    学习新技术的四点:

    1,该技术是什么?

    2,该技术有什么特点(使用注意):

    3,该技术怎么使用。demo

    4,该技术什么时候用?test。

    这是网上看到的觉得很贴合实际就码下来了


    概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍常用的两种:懒汉式单例、饿汉式单例。

    饿汉式和懒汉式区别

    从名字上来说,饿汉和懒汉,

    饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

    而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

    由于LZ现在是初学者,详细概念不深。

    具体的,推荐博文:JAVA设计模式之单例模式可以去看看

    思想

    1,不让其他程序创建该类对象。

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

    3,对外提供方法,让其他程序获取这个对象。

    步骤

    1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;

    2,就在类中创建一个本类的对象;

    3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)

    代码体现

    1,私有化构造函数;

    2,创建私有并静态的本类对象;

    3,定义公有并静态的方法,返回该对象。

    饿汉式

    //单例模式之饿汉模式
    public class Singleton {
        //1、将构造方法私有化,不允许外部直接创建对象
        private Singleton(){
        }
        
        //2、创建类的唯一实例
        private static Singleton instance = new Singleton();
        
        //3、提供一个用于获取实例的方法。使用public static修饰
        public static Singleton getInstance(){
            return instance;
        }
    }

    懒汉式

    //单例模式之懒汉式,延迟加载
    public class Singleton2 {
    
        //1.将构造方式私有化,不允许外部直接创建实例对象
        private Singleton2(){
        }
        //2.声明类的唯一实例,使用private static修饰
        private static Singleton2 instance;
        //3.提供一个用于获取实例对象的方法
        public static Singleton2 getInstance(){
            if(instance == null){
                instance = new Singleton2();
            }
            return instance;
        }
    }

    对于线程安全方面:(详细自行百度

    饿汉单例模式加载类时比较慢,获取对象速度快。线程是安全的。

    懒汉单例模式加载快,获取对象速度相对慢。线程是不安全的。

    测试:

    public class Test {
    
        public static void main(String[] args) {
            //饿汉模式
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            if(s1 == s2){
                System.out.println("s1和s2是同一个实例");
            }else{
                System.out.println("s1和s2是不是同一个实例");
            }
            
            //懒汉模式
            Singleton2 s3 = Singleton2.getInstance();
            Singleton2 s4 = Singleton2.getInstance();
            if(s3 == s4){
                System.out.println("s31和s4是同一个实例");
            }else{
                System.out.println("s3和s4是不是同一个实例");
            }
        }
    }

    输出结果:

    s1和s2是同一个实例
    s31和s4是同一个实例
    

     

  • 相关阅读:
    Linux下应急工具
    Windows NTLM Hash和Hash传递、Key传递攻击
    渗透中Meterpreter基本操作和对应的windows上的排查或者现象
    捕获一款无名挖矿木马(门罗币)样本分析
    Python守护进程和脚本单例运行
    iOS 支付宝支付
    iOS UI进阶-6.0 手势
    Objective-C中NSArray的基本用法示例
    UIImageView的图片居中问题
    iOS UI基础-19.0 UICollectionView
  • 原文地址:https://www.cnblogs.com/himonkey/p/7596600.html
Copyright © 2011-2022 走看看