zoukankan      html  css  js  c++  java
  • JAVA_SE基础——38.单例设计模式

    本文继续介绍23种设计模式系列之单例模式。

    我们在javaSE的基础学习中,会讲到:单例设计模式、模板设计模式、装饰者设计模式、观察者设计模式、工厂设计模式  


    我以后随着水平的提高,我会专门开个分类写设计模式的。现在请原谅我的知识面有限……


    设计模式→中的    “模式” 二字是什么意思。。


    模式:模式就是解决 一类 问题的固定步骤 。

    模式的概念最早起源于建筑行业....


    建房子的步骤都是一样子:


    打地基-----> 浇柱子------->盖楼面--------->砌墙--------->封顶---->装修-----入住


    单例设计模式:保证一个类在内存中只有一个对象。


    首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,

    比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,

    这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,

    即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。


    单例设计模式有两种: (但是写法很多种)

    饿汉单例设计模式
    1. 私有化构造函数。
    2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
    3. 提供一个公共静态的方法获取本类的对象。

    懒汉单例设计模式:
    1. 私有化构造函数。
    2. 声明本类的引用类型变量,但是不要创建对象,
    3. 提供公共静态 的方法获取本类 的对象,获取之前先判断是否已经创建了本类 对象
    ,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,
    然后再返回。

    推荐使用: 饿汉单例设计模式。  因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。 但是也要熟悉懒汉单例模式,因为面试经常会面这个。。



    测试代码1:(饿汉单例模式):

    //饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
    class Single{
    
    	//声明本类的引用类型变量,并且使用该变量指向本类对象
    	private static	Single s = new Single();
    
    	//私有化构造函数
    	private Single(){}
    
    	//提供一个公共静态的方法获取本类的对象
    	public	static  Single getInstance(){
    		return s;
    	}
    }
    class Demo2 
    {
    	public static void main(String[] args) 
    	{
    		Single s1 = Single.getInstance();
    		Single s2 = Single.getInstance();
    		System.out.println("是同一个对象吗?"+ (s1==s2));
    	}
    }

    运行结果:




    测试代码2:(懒汉单例模式):

    //饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
    class Single{
    
    	//声明本类的引用类型变量,并且使用该变量指向本类对象
    	private static	Single s = null;
    
    	//私有化构造函数
    	private Single(){}
    
    	//提供一个公共静态的方法获取本类的对象
    	public	static  Single getInstance(){
    		if(s==null){
    			s = new Single();
    		}
    		return s;
    	}
    }
    class Demo2 
    {
    	public static void main(String[] args) 
    	{
    		Single s1 = Single.getInstance();
    		Single s2 = Single.getInstance();
    		System.out.println("是同一个对象吗?"+ (s1==s2));
    	}
    }

    运行结果:




    懒汉式单例模式 ……关于线程问题也要等我再深入学习我才懂(我自己都没学到多线程)

    反正这篇blog 就当作是入门文档了,不能当最终版本的,因为我的知识面有限,抱歉。关于单列模式的东西 目前我也才学到这些,期待我的文章的人,可以粉我,到时我会专门开个分类来详细的写设计模式的 。。奋斗


  • 相关阅读:
    RF(常用关键字)
    RF(元素定位)
    HR系列GPS北斗时间同步服务器在电力系统典型应用
    基于GPS北斗卫星授时系统和NTP网络授时服务器的设计与开发
    北斗卫星同步时钟(NTP网络时钟服务器)成功投运世界级工程港珠澳大桥
    网络时钟服务器,NTP授时设备,北斗网络校时服务器,GPS时间同步器
    SAP SD基础知识之交货单不完全日志
    SAP SD基础知识之创建并处理外向交货单
    SAP SD基础知识之订单中装运相关的功能 II
    SAP SD基础知识之输出控制(Output Control)
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465306.html
Copyright © 2011-2022 走看看